Skip to content

GetOfferResponse

Properties

  • data (['object', 'null'])Cannot contain additional properties.

    • id (string, required)
    • omsOfferId (string, required)Required. Unique offer identifier. Must not be empty.
    • xmPieTemplateId (['string', 'null'])
    • xmPieUStoreId (['string', 'null'])
    • description (['string', 'null'])
    • accessGroups (['array', 'null'])

      • Items (string)
    • additionalPropsRequiredOnOrder (['array', 'null'])

      • Items (object)Cannot contain additional properties.

        • type (['string', 'null'])
        • hint (['string', 'null'])
        • label (['string', 'null'])
        • name (['string', 'null'])
        • value (['string', 'null'])
    • availableEndDate (['string', 'null'])Timestamp of when offer is no longer available. This should be in UTC.

    • availableStartDate (['string', 'null'])Timestamp of when offer is available. This should be in UTC.
    • categories (['array', 'null'])

      • Items (object)Cannot contain additional properties.

        • categoryKey (string, required)
        • name (string, required)
    • categoryIds (['array', 'null'])

      • Items (string)
    • comments (['string', 'null'])

    • defaultPrice (['number', 'null'], format: double)
    • deliveryScheduleCron (['string', 'null'])
    • doSuppressShippingAndHandling (boolean)
    • fixedOrderQuantities (['array', 'null'])

      • Items (integer, format: int32)
    • fullImageUrl (['string', 'null'])

    • integrationBrokerLastUpdatedDateTimeUtc (['string', 'null'])
    • isActive (boolean)
    • isAvailableViaCoopFunds (['boolean', 'null'])
    • isDeleted (boolean)
    • isInventoried (['boolean', 'null'])
    • isTaxable (boolean)
    • lastUpdatedDateTimeUTC (['string', 'null'])If provided, must not be in the future.
    • number (string, required)Required. Offer number. Must not be empty.
    • offerType (string, required)Required. Must be one of: Product List, Drop Ship, Download, VDM, Omnichannel. Must be one of: ["Product List", "Drop Ship", "Download", "VDM", "Omnichannel"].
    • omniChannel (['object', 'null'])Cannot contain additional properties.

      • offers (['array', 'null'])

        • Items (object)Cannot contain additional properties.

          • offerId (['string', 'null'])
          • deliveryChannel (['string', 'null'])
    • omsIdentifier (['string', 'null'])

    • omsRootSystemName (['string', 'null'])
    • onlyShipMethodsAvailable (['array', 'null'])

      • Items (string)
    • orderMaximum (['integer', 'null'], format: int32)

    • orderMinimum (['integer', 'null'], format: int32)
    • pdfUrl (['string', 'null'])
    • priceClasses (['array', 'null'])

      • Items (object)Cannot contain additional properties.

        • name (['string', 'null'])
        • price (['number', 'null'], format: double)
        • priceTiers (['array', 'null'])

          • Items (object)Cannot contain additional properties.

            • maximumQuantity (['integer', 'null'], format: int32)
            • minimumQuantity (['integer', 'null'], format: int32)
            • pageCounts (['array', 'null'])

              • Items (object)Cannot contain additional properties.

                • maximumPages (integer, format: int32)
                • minimumPages (integer, format: int32)
                • price (number, format: double)
            • price (number, format: double)

    • productClusters (['array', 'null'])Required if offerType is 'Product List'. Must contain at least one ProductCluster with at least one Product, each with a non-empty productId and pageCount >= 1 if provided.

      • Items (object)Cannot contain additional properties.

        • id (string, required)
        • products (['array', 'null'])

          • Items (object)Cannot contain additional properties.

            • omsProductId (['string', 'null'])
            • productId (['string', 'null'])
            • associatedFileName (['string', 'null'])
            • buildType (integer, format: int32)Must be one of: [0, 1, 2, 3, 4, 5].
            • pageCount (['integer', 'null'], format: int32)
            • productColor (['string', 'null'])
            • productDescription (['string', 'null'])
            • productNumber (['string', 'null'])
            • productQuantityInOffer (integer, format: int32)
            • productSize (['string', 'null'])
            • surcharge (['number', 'null'], format: double)
    • requiresApproval (['boolean', 'null'])

    • schemaVersion (string, required)
    • secureEmailBody (['string', 'null'])
    • secureEmailSubject (['string', 'null'])
    • surcharge (number, format: double)
    • thumbnailUrl (['string', 'null'])
    • unitOfMeasure (['string', 'null'])
    • weightInPounds (number, format: float)
  • failureMessages (array)

    • Items (string)
  • informationalMessages (array)

    • Items (string)
  • operationWasSuccessful (boolean)

Quicktype Command

quicktype \
    --framework SystemTextJson  \
    --lang cs  \
    --number-type double  \
    --src-lang schema  \
    --no-check-required  \
    --density dense  \
    --features complete  \
    --namespace OtpSchema.Api.OfferBroker.GetOfferResponse  \
    --src .working/build/internal/json-schema-for-cs/GetOfferResponse.json -o .working/build/internal/csharp/OtpSchema/Api/OfferBroker/GetOfferResponse.cs
GetOfferResponse
// <auto-generated />
//
// To parse this JSON data, add NuGet 'System.Text.Json' then do:
//
//    using OtpSchema.Api.OfferBroker.GetOfferResponse;
//
//    var getOfferResponse = GetOfferResponse.FromJson(jsonString);
#nullable enable
#pragma warning disable CS8618
#pragma warning disable CS8601
#pragma warning disable CS8603

namespace OtpSchema.Api.OfferBroker.GetOfferResponse
{
    using System;
    using System.Collections.Generic;

    using System.Text.Json;
    using System.Text.Json.Serialization;
    using System.Globalization;
    using J = System.Text.Json.Serialization.JsonPropertyNameAttribute;
    using N = System.Text.Json.Serialization.JsonIgnoreCondition;

    public partial class GetOfferResponse
    {
        [J("data")]                   public Data Data { get; set; }                     
        [J("failureMessages")]        public string[] FailureMessages { get; set; }      
        [J("informationalMessages")]  public string[] InformationalMessages { get; set; }
        [J("operationWasSuccessful")] public bool OperationWasSuccessful { get; set; }   
    }

    public partial class Data
    {
        [J("accessGroups")]                                                                               public string[] AccessGroups { get; set; }                                          
        [J("additionalPropsRequiredOnOrder")]                                                             public AdditionalPropsRequiredOnOrder[] AdditionalPropsRequiredOnOrder { get; set; }
        [J("availableEndDate")]                                                                           public string AvailableEndDate { get; set; }                                         // Timestamp of when offer is no longer available.  This should be in UTC.
        [J("availableStartDate")]                                                                         public string AvailableStartDate { get; set; }                                       // Timestamp of when offer is available.  This should be in UTC.
        [J("categories")]                                                                                 public Category[] Categories { get; set; }                                          
        [J("categoryIds")]                                                                                public string[] CategoryIds { get; set; }                                           
        [J("comments")]                                                                                   public string Comments { get; set; }                                                
        [J("defaultPrice")]                                                                               public double? DefaultPrice { get; set; }                                           
        [J("deliveryScheduleCron")]                                                                       public string DeliveryScheduleCron { get; set; }                                    
        [J("description")]                                                                                public string Description { get; set; }                                             
        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)][J("doSuppressShippingAndHandling")] public bool? DoSuppressShippingAndHandling { get; set; }                            
        [J("fixedOrderQuantities")]                                                                       public long[] FixedOrderQuantities { get; set; }                                    
        [J("fullImageUrl")]                                                                               public string FullImageUrl { get; set; }                                            
        [J("id")]                                                                                         public string Id { get; set; }                                                      
        [J("integrationBrokerLastUpdatedDateTimeUtc")]                                                    public string IntegrationBrokerLastUpdatedDateTimeUtc { get; set; }                 
        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)][J("isActive")]                      public bool? IsActive { get; set; }                                                 
        [J("isAvailableViaCoopFunds")]                                                                    public bool? IsAvailableViaCoopFunds { get; set; }                                  
        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)][J("isDeleted")]                     public bool? IsDeleted { get; set; }                                                
        [J("isInventoried")]                                                                              public bool? IsInventoried { get; set; }                                            
        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)][J("isTaxable")]                     public bool? IsTaxable { get; set; }                                                
        [J("lastUpdatedDateTimeUTC")]                                                                     public string LastUpdatedDateTimeUtc { get; set; }                                   // If provided, must not be in the future.
        [J("number")][JsonConverter(typeof(MinMaxLengthCheckConverter))]                                  public string Number { get; set; }                                                   // Required. Offer number. Must not be empty.
        [J("offerType")]                                                                                  public OfferType OfferType { get; set; }                                             // Required. Must be one of: Product List, Drop Ship, Download, VDM, Omnichannel.
        [J("omniChannel")]                                                                                public OmniChannel OmniChannel { get; set; }                                        
        [J("omsIdentifier")]                                                                              public string OmsIdentifier { get; set; }                                           
        [J("omsOfferId")][JsonConverter(typeof(MinMaxLengthCheckConverter))]                              public string OmsOfferId { get; set; }                                               // Required. Unique offer identifier. Must not be empty.
        [J("omsRootSystemName")]                                                                          public string OmsRootSystemName { get; set; }                                       
        [J("onlyShipMethodsAvailable")]                                                                   public string[] OnlyShipMethodsAvailable { get; set; }                              
        [J("orderMaximum")]                                                                               public long? OrderMaximum { get; set; }                                             
        [J("orderMinimum")]                                                                               public long? OrderMinimum { get; set; }                                             
        [J("pdfUrl")]                                                                                     public string PdfUrl { get; set; }                                                  
        [J("priceClasses")]                                                                               public PriceClass[] PriceClasses { get; set; }                                      
        [J("productClusters")]                                                                            public ProductCluster[] ProductClusters { get; set; }                                // Required if offerType is 'Product List'. Must contain at least one ProductCluster with at; least one Product, each with a non-empty productId and pageCount >= 1 if provided.
        [J("requiresApproval")]                                                                           public bool? RequiresApproval { get; set; }                                         
        [J("schemaVersion")]                                                                              public string SchemaVersion { get; set; }                                           
        [J("secureEmailBody")]                                                                            public string SecureEmailBody { get; set; }                                         
        [J("secureEmailSubject")]                                                                         public string SecureEmailSubject { get; set; }                                      
        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)][J("surcharge")]                     public double? Surcharge { get; set; }                                              
        [J("thumbnailUrl")]                                                                               public string ThumbnailUrl { get; set; }                                            
        [J("unitOfMeasure")]                                                                              public string UnitOfMeasure { get; set; }                                           
        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)][J("weightInPounds")]                public double? WeightInPounds { get; set; }                                         
        [J("xmPieTemplateId")]                                                                            public string XmPieTemplateId { get; set; }                                         
        [J("xmPieUStoreId")]                                                                              public string XmPieUStoreId { get; set; }                                           
    }

    public partial class AdditionalPropsRequiredOnOrder
    {
        [J("hint")]  public string Hint { get; set; } 
        [J("label")] public string Label { get; set; }
        [J("name")]  public string Name { get; set; } 
        [J("type")]  public string Type { get; set; } 
        [J("value")] public string Value { get; set; }
    }

    public partial class Category
    {
        [J("categoryKey")] public string CategoryKey { get; set; }
        [J("name")]        public string Name { get; set; }       
    }

    public partial class OmniChannel
    {
        [J("offers")] public Offer[] Offers { get; set; }
    }

    public partial class Offer
    {
        [J("deliveryChannel")] public string DeliveryChannel { get; set; }
        [J("offerId")]         public string OfferId { get; set; }        
    }

    public partial class PriceClass
    {
        [J("name")]       public string Name { get; set; }           
        [J("price")]      public double? Price { get; set; }         
        [J("priceTiers")] public PriceTier[] PriceTiers { get; set; }
    }

    public partial class PriceTier
    {
        [J("maximumQuantity")]                                                    public long? MaximumQuantity { get; set; } 
        [J("minimumQuantity")]                                                    public long? MinimumQuantity { get; set; } 
        [J("pageCounts")]                                                         public PageCount[] PageCounts { get; set; }
        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)][J("price")] public double? Price { get; set; }         
    }

    public partial class PageCount
    {
        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)][J("maximumPages")] public long? MaximumPages { get; set; }
        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)][J("minimumPages")] public long? MinimumPages { get; set; }
        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)][J("price")]        public double? Price { get; set; }     
    }

    public partial class ProductCluster
    {
        [J("id")]       public string Id { get; set; }         
        [J("products")] public Product[] Products { get; set; }
    }

    public partial class Product
    {
        [J("associatedFileName")]                                                                  public string AssociatedFileName { get; set; }   
        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)][J("buildType")]              public long? BuildType { get; set; }             
        [J("omsProductId")]                                                                        public string OmsProductId { get; set; }         
        [J("pageCount")]                                                                           public long? PageCount { get; set; }             
        [J("productColor")]                                                                        public string ProductColor { get; set; }         
        [J("productDescription")]                                                                  public string ProductDescription { get; set; }   
        [J("productId")]                                                                           public string ProductId { get; set; }            
        [J("productNumber")]                                                                       public string ProductNumber { get; set; }        
        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)][J("productQuantityInOffer")] public long? ProductQuantityInOffer { get; set; }
        [J("productSize")]                                                                         public string ProductSize { get; set; }          
        [J("surcharge")]                                                                           public double? Surcharge { get; set; }           
    }

    /// <summary>Required. Must be one of: Product List, Drop Ship, Download, VDM, Omnichannel.</summary>
    public enum OfferType { Download, DropShip, Omnichannel, ProductList, Vdm };

    public partial class GetOfferResponse
    {
        public static GetOfferResponse FromJson(string json) => JsonSerializer.Deserialize<GetOfferResponse>(json, OtpSchema.Api.OfferBroker.GetOfferResponse.Converter.Settings);
    }

    public static class Serialize
    {
        public static string ToJson(this GetOfferResponse self) => JsonSerializer.Serialize(self, OtpSchema.Api.OfferBroker.GetOfferResponse.Converter.Settings);
    }

    internal static class Converter
    {
        public static readonly JsonSerializerOptions Settings = new(JsonSerializerDefaults.General)
        {
            Converters =
            {
                OfferTypeConverter.Singleton,
                new DateOnlyConverter(),
                new TimeOnlyConverter(),
                IsoDateTimeOffsetConverter.Singleton
            },
        };
    }

    internal class MinMaxLengthCheckConverter : JsonConverter<string>
    {
        public override bool CanConvert(Type t) => t == typeof(string);

        public override string Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
        {
            var value = reader.GetString();
            if (value != null && value.Length >= 1)
            {
                return value;
            }
            throw new Exception("Cannot unmarshal type string");
        }

        public override void Write(Utf8JsonWriter writer, string value, JsonSerializerOptions options)
        {
            if (value != null && value.Length >= 1)
            {
                JsonSerializer.Serialize(writer, value, options);
                return;
            }
            throw new Exception("Cannot marshal type string");
        }

        public static readonly MinMaxLengthCheckConverter Singleton = new MinMaxLengthCheckConverter();
    }

    internal class OfferTypeConverter : JsonConverter<OfferType>
    {
        public override bool CanConvert(Type t) => t == typeof(OfferType);

        public override OfferType Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
        {
            var value = reader.GetString();
            switch (value)
            {
                case "Download":
                    return OfferType.Download;
                case "Drop Ship":
                    return OfferType.DropShip;
                case "Omnichannel":
                    return OfferType.Omnichannel;
                case "Product List":
                    return OfferType.ProductList;
                case "VDM":
                    return OfferType.Vdm;
            }
            throw new Exception("Cannot unmarshal type OfferType");
        }

        public override void Write(Utf8JsonWriter writer, OfferType value, JsonSerializerOptions options)
        {
            switch (value)
            {
                case OfferType.Download:
                    JsonSerializer.Serialize(writer, "Download", options);
                    return;
                case OfferType.DropShip:
                    JsonSerializer.Serialize(writer, "Drop Ship", options);
                    return;
                case OfferType.Omnichannel:
                    JsonSerializer.Serialize(writer, "Omnichannel", options);
                    return;
                case OfferType.ProductList:
                    JsonSerializer.Serialize(writer, "Product List", options);
                    return;
                case OfferType.Vdm:
                    JsonSerializer.Serialize(writer, "VDM", options);
                    return;
            }
            throw new Exception("Cannot marshal type OfferType");
        }

        public static readonly OfferTypeConverter Singleton = new OfferTypeConverter();
    }

    public class DateOnlyConverter : JsonConverter<DateOnly>
    {
        private readonly string serializationFormat;
        public DateOnlyConverter() : this(null) { }

        public DateOnlyConverter(string? serializationFormat)
        {
                this.serializationFormat = serializationFormat ?? "yyyy-MM-dd";
        }

        public override DateOnly Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
        {
                var value = reader.GetString();
                return DateOnly.Parse(value!);
        }

        public override void Write(Utf8JsonWriter writer, DateOnly value, JsonSerializerOptions options)
                => writer.WriteStringValue(value.ToString(serializationFormat));
    }

    public class TimeOnlyConverter : JsonConverter<TimeOnly>
    {
        private readonly string serializationFormat;

        public TimeOnlyConverter() : this(null) { }

        public TimeOnlyConverter(string? serializationFormat)
        {
                this.serializationFormat = serializationFormat ?? "HH:mm:ss.fff";
        }

        public override TimeOnly Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
        {
                var value = reader.GetString();
                return TimeOnly.Parse(value!);
        }

        public override void Write(Utf8JsonWriter writer, TimeOnly value, JsonSerializerOptions options)
                => writer.WriteStringValue(value.ToString(serializationFormat));
    }

    internal class IsoDateTimeOffsetConverter : JsonConverter<DateTimeOffset>
    {
        public override bool CanConvert(Type t) => t == typeof(DateTimeOffset);

        private const string DefaultDateTimeFormat = "yyyy'-'MM'-'dd'T'HH':'mm':'ss.FFFFFFFK";

        private DateTimeStyles _dateTimeStyles = DateTimeStyles.RoundtripKind;
        private string? _dateTimeFormat;
        private CultureInfo? _culture;

        public DateTimeStyles DateTimeStyles
        {
                get => _dateTimeStyles;
                set => _dateTimeStyles = value;
        }

        public string? DateTimeFormat
        {
                get => _dateTimeFormat ?? string.Empty;
                set => _dateTimeFormat = (string.IsNullOrEmpty(value)) ? null : value;
        }

        public CultureInfo Culture
        {
                get => _culture ?? CultureInfo.CurrentCulture;
                set => _culture = value;
        }

        public override void Write(Utf8JsonWriter writer, DateTimeOffset value, JsonSerializerOptions options)
        {
                string text;


                if ((_dateTimeStyles & DateTimeStyles.AdjustToUniversal) == DateTimeStyles.AdjustToUniversal
                        || (_dateTimeStyles & DateTimeStyles.AssumeUniversal) == DateTimeStyles.AssumeUniversal)
                {
                        value = value.ToUniversalTime();
                }

                text = value.ToString(_dateTimeFormat ?? DefaultDateTimeFormat, Culture);

                writer.WriteStringValue(text);
        }

        public override DateTimeOffset Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
        {
                string? dateText = reader.GetString();

                if (string.IsNullOrEmpty(dateText) == false)
                {
                        if (!string.IsNullOrEmpty(_dateTimeFormat))
                        {
                                return DateTimeOffset.ParseExact(dateText, _dateTimeFormat, Culture, _dateTimeStyles);
                        }
                        else
                        {
                                return DateTimeOffset.Parse(dateText, Culture, _dateTimeStyles);
                        }
                }
                else
                {
                        return default(DateTimeOffset);
                }
        }


        public static readonly IsoDateTimeOffsetConverter Singleton = new IsoDateTimeOffsetConverter();
    }
}
#pragma warning restore CS8618
#pragma warning restore CS8601
#pragma warning restore CS8603

GetOfferResponse
{
  "$schema": "http://json-schema.org/draft-07/schema#", 
  "$id": "GetOfferResponse.json", 
  "type": "object", 
  "additionalProperties": false, 
  "properties": {
    "data": {
      "type": ["object", "null"], 
      "additionalProperties": false, 
      "properties": {
        "id": {"type": "string"}, 
        "omsOfferId": {
          "description": "Required. Unique offer identifier. Must not be empty.", 
          "type": "string", 
          "minLength": 1
        }, 
        "xmPieTemplateId": { "type": ["string", "null"] }, 
        "xmPieUStoreId": { "type": ["string", "null"] }, 
        "description": { "type": ["string", "null"] }, 
        "accessGroups": { "type": ["array", "null"], "items": {"type": "string"} }, 
        "additionalPropsRequiredOnOrder": {
          "type": ["array", "null"], 
          "items": {
            "type": "object", 
            "additionalProperties": false, 
            "properties": {
              "type" : { "type": ["string", "null"] }, 
              "hint" : { "type": ["string", "null"] }, 
              "label": { "type": ["string", "null"] }, 
              "name" : { "type": ["string", "null"] }, 
              "value": { "type": ["string", "null"] }
            }
          }
        }, 
        "availableEndDate": {
          "description": "Timestamp of when offer is no longer available.  This should be in UTC.", 
          "type": ["string", "null"]
        }, 
        "availableStartDate": {
          "description": "Timestamp of when offer is available.  This should be in UTC.", 
          "type": ["string", "null"]
        }, 
        "categories": {
          "type": ["array", "null"], 
          "items": {
            "type": "object", 
            "additionalProperties": false, 
            "properties": { "categoryKey": {"type": "string"}, "name": {"type": "string"} }, 
            "required": ["categoryKey", "name"]
          }
        }, 
        "categoryIds": { "type": ["array", "null"], "items": {"type": "string"} }, 
        "comments": { "type": ["string", "null"] }, 
        "defaultPrice": { "type": ["number", "null"], "format": "double" }, 
        "deliveryScheduleCron": { "type": ["string", "null"] }, 
        "doSuppressShippingAndHandling": {"type": "boolean"}, 
        "fixedOrderQuantities": { "type": ["array", "null"], "items": {"type": "integer", "format": "int32"} }, 
        "fullImageUrl": { "type": ["string", "null"] }, 
        "integrationBrokerLastUpdatedDateTimeUtc": { "type": ["string", "null"] }, 
        "isActive": {"type": "boolean"}, 
        "isAvailableViaCoopFunds": { "type": ["boolean", "null"] }, 
        "isDeleted": {"type": "boolean"}, 
        "isInventoried": { "type": ["boolean", "null"] }, 
        "isTaxable": {"type": "boolean"}, 
        "lastUpdatedDateTimeUTC": {
          "description": "If provided, must not be in the future.", 
          "type": ["string", "null"]
        }, 
        "number": {
          "description": "Required. Offer number. Must not be empty.", 
          "type": "string", 
          "minLength": 1
        }, 
        "offerType": {
          "description": "Required. Must be one of: Product List, Drop Ship, Download, VDM, Omnichannel.", 
          "type": "string", 
          "enum": ["Product List", "Drop Ship", "Download", "VDM", "Omnichannel"], 
          "minLength": 1
        }, 
        "omniChannel": {
          "type": ["object", "null"], 
          "additionalProperties": false, 
          "properties": {
            "offers": {
              "type": ["array", "null"], 
              "items": {
                "type": "object", 
                "additionalProperties": false, 
                "properties": {
                  "offerId"        : { "type": ["string", "null"] }, 
                  "deliveryChannel": { "type": ["string", "null"] }
                }
              }
            }
          }
        }, 
        "omsIdentifier": { "type": ["string", "null"] }, 
        "omsRootSystemName": { "type": ["string", "null"] }, 
        "onlyShipMethodsAvailable": { "type": ["array", "null"], "items": {"type": "string"} }, 
        "orderMaximum": { "type": ["integer", "null"], "format": "int32" }, 
        "orderMinimum": { "type": ["integer", "null"], "format": "int32" }, 
        "pdfUrl": { "type": ["string", "null"] }, 
        "priceClasses": {
          "type": ["array", "null"], 
          "items": {
            "type": "object", 
            "additionalProperties": false, 
            "properties": {
              "name": { "type": ["string", "null"] }, 
              "price": { "type": ["number", "null"], "format": "double" }, 
              "priceTiers": {
                "type": ["array", "null"], 
                "items": {
                  "type": "object", 
                  "additionalProperties": false, 
                  "properties": {
                    "maximumQuantity": { "type": ["integer", "null"], "format": "int32" }, 
                    "minimumQuantity": { "type": ["integer", "null"], "format": "int32" }, 
                    "pageCounts": {
                      "type": ["array", "null"], 
                      "items": {
                        "type": "object", 
                        "additionalProperties": false, 
                        "properties": {
                          "maximumPages": { "type": "integer", "format": "int32"  }, 
                          "minimumPages": { "type": "integer", "format": "int32"  }, 
                          "price"       : { "type": "number" , "format": "double" }
                        }
                      }
                    }, 
                    "price": {"type": "number", "format": "double"}
                  }
                }
              }
            }
          }
        }, 
        "productClusters": {
          "description": "Required if offerType is 'Product List'. Must contain at least one ProductCluster with at least one Product, each with a non-empty productId and pageCount >= 1 if provided.", 
          "type": ["array", "null"], 
          "items": {
            "type": "object", 
            "additionalProperties": false, 
            "properties": {
              "id": {"type": "string"}, 
              "products": {
                "type": ["array", "null"], 
                "items": {
                  "type": "object", 
                  "additionalProperties": false, 
                  "properties": {
                    "omsProductId": { "type": ["string", "null"] }, 
                    "productId": { "type": ["string", "null"] }, 
                    "associatedFileName": { "type": ["string", "null"] }, 
                    "buildType": { "type": "integer", "enum": [0, 1, 2, 3, 4, 5], "format": "int32" }, 
                    "pageCount": { "type": ["integer", "null"], "format": "int32" }, 
                    "productColor": { "type": ["string", "null"] }, 
                    "productDescription": { "type": ["string", "null"] }, 
                    "productNumber": { "type": ["string", "null"] }, 
                    "productQuantityInOffer": {"type": "integer", "format": "int32"}, 
                    "productSize": { "type": ["string", "null"] }, 
                    "surcharge": { "type": ["number", "null"], "format": "double" }
                  }
                }
              }
            }, 
            "required": ["id"]
          }
        }, 
        "requiresApproval": { "type": ["boolean", "null"] }, 
        "schemaVersion": {"type": "string"}, 
        "secureEmailBody": { "type": ["string", "null"] }, 
        "secureEmailSubject": { "type": ["string", "null"] }, 
        "surcharge": {"type": "number", "format": "double"}, 
        "thumbnailUrl": { "type": ["string", "null"] }, 
        "unitOfMeasure": { "type": ["string", "null"] }, 
        "weightInPounds": {"type": "number", "format": "float"}
      }, 
      "required": ["id", "omsOfferId", "number", "offerType", "schemaVersion"]
    }, 
    "failureMessages": { "type": "array", "items": {"type": "string"} }, 
    "informationalMessages": { "type": "array", "items": {"type": "string"} }, 
    "operationWasSuccessful": {"type": "boolean"}
  }, 
  "required": ["failureMessages", "informationalMessages", "operationWasSuccessful", "data"]
}