From 0a6ef19e39d4d46737b30d56f80a57c257e47993 Mon Sep 17 00:00:00 2001
From: Paul Cothenet <pcothenet@gmail.com>
Date: Fri, 10 Jan 2025 15:55:01 -0800
Subject: [PATCH] Remove unused estimates endpoint

---
 .rubocop.yml                                  |   2 +-
 Gemfile.lock                                  |   9 +-
 lib/patch_ruby.rb                             |   3 -
 lib/patch_ruby/api/estimates_api.rb           | 227 +----------
 lib/patch_ruby/api/order_line_items_api.rb    |   2 +-
 lib/patch_ruby/api/orders_api.rb              |   2 +-
 lib/patch_ruby/api/projects_api.rb            |   2 +-
 lib/patch_ruby/api/technology_types_api.rb    |   2 +-
 lib/patch_ruby/api_client.rb                  |   2 +-
 lib/patch_ruby/configuration.rb               |   3 +-
 .../create_ethereum_estimate_request.rb       | 281 -------------
 .../models/create_order_line_item_request.rb  |  34 +-
 lib/patch_ruby/models/create_order_request.rb |  34 +-
 .../create_shipping_estimate_request.rb       | 373 ------------------
 .../models/create_vehicle_estimate_request.rb | 328 ---------------
 lib/patch_ruby/models/estimate.rb             |   2 +-
 lib/patch_ruby/models/project.rb              |   2 +-
 .../models/update_order_line_item_request.rb  |  34 +-
 lib/patch_ruby/version.rb                     |   2 +-
 patch_ruby.gemspec                            |   2 +-
 spec/integration/estimates_spec.rb            |  65 ---
 21 files changed, 69 insertions(+), 1342 deletions(-)
 delete mode 100644 lib/patch_ruby/models/create_ethereum_estimate_request.rb
 delete mode 100644 lib/patch_ruby/models/create_shipping_estimate_request.rb
 delete mode 100644 lib/patch_ruby/models/create_vehicle_estimate_request.rb

diff --git a/.rubocop.yml b/.rubocop.yml
index 68a80ad..cfaaf0d 100644
--- a/.rubocop.yml
+++ b/.rubocop.yml
@@ -51,7 +51,7 @@ Style/HashSyntax:
 # extra level of indentation.
 Layout/IndentationConsistency:
   Enabled: true
-  EnforcedStyle: indented_internal_methods
+  EnforcedStyle: normal
 
 # Two spaces, no tabs (for indentation).
 Layout/IndentationWidth:
diff --git a/Gemfile.lock b/Gemfile.lock
index be348cf..df5a0ae 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -1,7 +1,7 @@
 PATH
   remote: .
   specs:
-    patch_ruby (2.1.1)
+    patch_ruby (2.3.0)
       typhoeus (~> 1.0, >= 1.0.1)
 
 GEM
@@ -21,10 +21,10 @@ GEM
       ffi (>= 1.15.0)
     factory_bot (6.2.0)
       activesupport (>= 5.0.0)
-    ffi (1.15.5)
+    ffi (1.17.1)
     i18n (1.12.0)
       concurrent-ruby (~> 1.0)
-    jaro_winkler (1.5.4)
+    jaro_winkler (1.5.6)
     method_source (1.0.0)
     minitest (5.18.0)
     parallel (1.20.1)
@@ -61,7 +61,7 @@ GEM
       ruby-progressbar (~> 1.7)
       unicode-display_width (>= 1.4.0, < 1.6)
     ruby-progressbar (1.11.0)
-    typhoeus (1.4.0)
+    typhoeus (1.4.1)
       ethon (>= 0.9.0)
     tzinfo (2.0.6)
       concurrent-ruby (~> 1.0)
@@ -71,6 +71,7 @@ PLATFORMS
   arm64-darwin-20
   arm64-darwin-21
   arm64-darwin-22
+  arm64-darwin-24
   x86_64-darwin-20
   x86_64-darwin-21
   x86_64-linux
diff --git a/lib/patch_ruby.rb b/lib/patch_ruby.rb
index 98658e4..d3bcf8c 100644
--- a/lib/patch_ruby.rb
+++ b/lib/patch_ruby.rb
@@ -20,7 +20,6 @@
 require 'patch_ruby/models/create_air_shipping_estimate_request'
 require 'patch_ruby/models/create_bitcoin_estimate_request'
 require 'patch_ruby/models/create_ecommerce_estimate_request'
-require 'patch_ruby/models/create_ethereum_estimate_request'
 require 'patch_ruby/models/create_flight_estimate_request'
 require 'patch_ruby/models/create_hotel_estimate_request'
 require 'patch_ruby/models/create_mass_estimate_request'
@@ -29,9 +28,7 @@
 require 'patch_ruby/models/create_rail_shipping_estimate_request'
 require 'patch_ruby/models/create_road_shipping_estimate_request'
 require 'patch_ruby/models/create_sea_shipping_estimate_request'
-require 'patch_ruby/models/create_shipping_estimate_request'
 require 'patch_ruby/models/create_success_response'
-require 'patch_ruby/models/create_vehicle_estimate_request'
 require 'patch_ruby/models/delete_order_line_item_response'
 require 'patch_ruby/models/delete_order_response'
 require 'patch_ruby/models/disclaimer'
diff --git a/lib/patch_ruby/api/estimates_api.rb b/lib/patch_ruby/api/estimates_api.rb
index 8e90be9..b1da8e0 100644
--- a/lib/patch_ruby/api/estimates_api.rb
+++ b/lib/patch_ruby/api/estimates_api.rb
@@ -18,15 +18,12 @@ class EstimatesApi
       :create_air_shipping_estimate,
       :create_bitcoin_estimate,
       :create_ecommerce_estimate,
-      :create_ethereum_estimate,
       :create_flight_estimate,
       :create_hotel_estimate,
       :create_mass_estimate,
       :create_rail_shipping_estimate,
       :create_road_shipping_estimate,
       :create_sea_shipping_estimate,
-      :create_shipping_estimate,
-      :create_vehicle_estimate,
       :retrieve_estimate,
       :retrieve_estimates,
     ]
@@ -258,80 +255,6 @@ def create_ecommerce_estimate_with_http_info(create_ecommerce_estimate_request,
       return data, status_code, headers
     end
 
-    # Create an ethereum estimate
-    # Creates an ethereum estimate for the amount of CO2 to be compensated. An order in the `draft` state may be created based on the parameters, linked to the estimate. 
-    # @param create_ethereum_estimate_request [CreateEthereumEstimateRequest] 
-    # @param [Hash] opts the optional parameters
-    # @option opts [Integer] :patch_version 
-    # @return [EstimateResponse]
-    def create_ethereum_estimate(create_ethereum_estimate_request = {}, opts = {})
-      _create_ethereum_estimate_request = Patch::CreateEthereumEstimateRequest.new(create_ethereum_estimate_request) 
-      data, _status_code, _headers = create_ethereum_estimate_with_http_info(_create_ethereum_estimate_request, opts)
-      data
-    end
-
-    # Create an ethereum estimate
-    # Creates an ethereum estimate for the amount of CO2 to be compensated. An order in the `draft` state may be created based on the parameters, linked to the estimate. 
-    # @param create_ethereum_estimate_request [CreateEthereumEstimateRequest] 
-    # @param [Hash] opts the optional parameters
-    # @option opts [Integer] :patch_version 
-    # @return [Array<(EstimateResponse, Integer, Hash)>] EstimateResponse data, response status code and response headers
-    def create_ethereum_estimate_with_http_info(create_ethereum_estimate_request, opts = {})
-      if @api_client.config.debugging
-        @api_client.config.logger.debug 'Calling API: EstimatesApi.create_ethereum_estimate ...'
-      end
-      # verify the required parameter 'create_ethereum_estimate_request' is set
-      if @api_client.config.client_side_validation && create_ethereum_estimate_request.nil?
-        fail ArgumentError, "Missing the required parameter 'create_ethereum_estimate_request' when calling EstimatesApi.create_ethereum_estimate"
-      end
-      # resource path
-      local_var_path = '/v1/estimates/crypto/eth'
-
-      # query parameters
-      query_params = opts[:query_params] || {}
-
-      # header parameters
-      header_params = opts[:header_params] || {}
-
-      # HTTP header 'Accept' (if needed)
-      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
-      # HTTP header 'Content-Type'
-      content_type = @api_client.select_header_content_type(['application/json'])
-      if !content_type.nil?
-        header_params['Content-Type'] = content_type
-      end
-      header_params['Patch-Version'] = 2
-      header_params[:'Patch-Version'] = opts[:'patch_version'] if !opts[:'patch_version'].nil?
-
-      # form parameters
-      form_params = opts[:form_params] || {}
-
-      # http body (model)
-      post_body = opts[:debug_body] || @api_client.object_to_http_body(create_ethereum_estimate_request)
-
-      # return_type
-      return_type = opts[:debug_return_type] || 'EstimateResponse'
-
-      # auth_names
-      auth_names = opts[:debug_auth_names] || ['bearer_auth']
-
-      new_options = opts.merge(
-        :operation => :"EstimatesApi.create_ethereum_estimate",
-        :header_params => header_params,
-        :query_params => query_params,
-        :form_params => form_params,
-        :body => post_body,
-        :auth_names => auth_names,
-        :return_type => return_type
-      )
-
-      data, status_code, headers = @api_client.call_api(:POST, local_var_path, new_options)
-      if @api_client.config.debugging
-        @api_client.config.logger.debug "API called: EstimatesApi#create_ethereum_estimate\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
-      end
-      return data, status_code, headers
-    end
-
     # Create a flight estimate given the distance traveled in meters
     # Creates a flight estimate for the amount of CO2 to be compensated. An order in the `draft` state may be created based on the parameters, linked to the estimate. 
     # @param create_flight_estimate_request [CreateFlightEstimateRequest] 
@@ -776,154 +699,6 @@ def create_sea_shipping_estimate_with_http_info(create_sea_shipping_estimate_req
       return data, status_code, headers
     end
 
-    # Create a shipping estimate given the distance traveled in meters, package weight, and transportation method.
-    # Creates a shipping estimate for the amount of CO2 to be compensated. An order in the `draft` state may be created based on the parameters. 
-    # @param create_shipping_estimate_request [CreateShippingEstimateRequest] 
-    # @param [Hash] opts the optional parameters
-    # @option opts [Integer] :patch_version 
-    # @return [EstimateResponse]
-    def create_shipping_estimate(create_shipping_estimate_request = {}, opts = {})
-      _create_shipping_estimate_request = Patch::CreateShippingEstimateRequest.new(create_shipping_estimate_request) 
-      data, _status_code, _headers = create_shipping_estimate_with_http_info(_create_shipping_estimate_request, opts)
-      data
-    end
-
-    # Create a shipping estimate given the distance traveled in meters, package weight, and transportation method.
-    # Creates a shipping estimate for the amount of CO2 to be compensated. An order in the `draft` state may be created based on the parameters. 
-    # @param create_shipping_estimate_request [CreateShippingEstimateRequest] 
-    # @param [Hash] opts the optional parameters
-    # @option opts [Integer] :patch_version 
-    # @return [Array<(EstimateResponse, Integer, Hash)>] EstimateResponse data, response status code and response headers
-    def create_shipping_estimate_with_http_info(create_shipping_estimate_request, opts = {})
-      if @api_client.config.debugging
-        @api_client.config.logger.debug 'Calling API: EstimatesApi.create_shipping_estimate ...'
-      end
-      # verify the required parameter 'create_shipping_estimate_request' is set
-      if @api_client.config.client_side_validation && create_shipping_estimate_request.nil?
-        fail ArgumentError, "Missing the required parameter 'create_shipping_estimate_request' when calling EstimatesApi.create_shipping_estimate"
-      end
-      # resource path
-      local_var_path = '/v1/estimates/shipping'
-
-      # query parameters
-      query_params = opts[:query_params] || {}
-
-      # header parameters
-      header_params = opts[:header_params] || {}
-
-      # HTTP header 'Accept' (if needed)
-      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
-      # HTTP header 'Content-Type'
-      content_type = @api_client.select_header_content_type(['application/json'])
-      if !content_type.nil?
-        header_params['Content-Type'] = content_type
-      end
-      header_params['Patch-Version'] = 2
-      header_params[:'Patch-Version'] = opts[:'patch_version'] if !opts[:'patch_version'].nil?
-
-      # form parameters
-      form_params = opts[:form_params] || {}
-
-      # http body (model)
-      post_body = opts[:debug_body] || @api_client.object_to_http_body(create_shipping_estimate_request)
-
-      # return_type
-      return_type = opts[:debug_return_type] || 'EstimateResponse'
-
-      # auth_names
-      auth_names = opts[:debug_auth_names] || ['bearer_auth']
-
-      new_options = opts.merge(
-        :operation => :"EstimatesApi.create_shipping_estimate",
-        :header_params => header_params,
-        :query_params => query_params,
-        :form_params => form_params,
-        :body => post_body,
-        :auth_names => auth_names,
-        :return_type => return_type
-      )
-
-      data, status_code, headers = @api_client.call_api(:POST, local_var_path, new_options)
-      if @api_client.config.debugging
-        @api_client.config.logger.debug "API called: EstimatesApi#create_shipping_estimate\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
-      end
-      return data, status_code, headers
-    end
-
-    # Create a vehicle estimate given the distance traveled in meters and the type of vehicle
-    # Creates an estimate and calculates the amount of CO2 to be compensated depending on the distance and the vehicle. An order in the `draft` state may be created based on the parameters, linked to the estimate. 
-    # @param create_vehicle_estimate_request [CreateVehicleEstimateRequest] 
-    # @param [Hash] opts the optional parameters
-    # @option opts [Integer] :patch_version 
-    # @return [EstimateResponse]
-    def create_vehicle_estimate(create_vehicle_estimate_request = {}, opts = {})
-      _create_vehicle_estimate_request = Patch::CreateVehicleEstimateRequest.new(create_vehicle_estimate_request) 
-      data, _status_code, _headers = create_vehicle_estimate_with_http_info(_create_vehicle_estimate_request, opts)
-      data
-    end
-
-    # Create a vehicle estimate given the distance traveled in meters and the type of vehicle
-    # Creates an estimate and calculates the amount of CO2 to be compensated depending on the distance and the vehicle. An order in the `draft` state may be created based on the parameters, linked to the estimate. 
-    # @param create_vehicle_estimate_request [CreateVehicleEstimateRequest] 
-    # @param [Hash] opts the optional parameters
-    # @option opts [Integer] :patch_version 
-    # @return [Array<(EstimateResponse, Integer, Hash)>] EstimateResponse data, response status code and response headers
-    def create_vehicle_estimate_with_http_info(create_vehicle_estimate_request, opts = {})
-      if @api_client.config.debugging
-        @api_client.config.logger.debug 'Calling API: EstimatesApi.create_vehicle_estimate ...'
-      end
-      # verify the required parameter 'create_vehicle_estimate_request' is set
-      if @api_client.config.client_side_validation && create_vehicle_estimate_request.nil?
-        fail ArgumentError, "Missing the required parameter 'create_vehicle_estimate_request' when calling EstimatesApi.create_vehicle_estimate"
-      end
-      # resource path
-      local_var_path = '/v1/estimates/vehicle'
-
-      # query parameters
-      query_params = opts[:query_params] || {}
-
-      # header parameters
-      header_params = opts[:header_params] || {}
-
-      # HTTP header 'Accept' (if needed)
-      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
-      # HTTP header 'Content-Type'
-      content_type = @api_client.select_header_content_type(['application/json'])
-      if !content_type.nil?
-        header_params['Content-Type'] = content_type
-      end
-      header_params['Patch-Version'] = 2
-      header_params[:'Patch-Version'] = opts[:'patch_version'] if !opts[:'patch_version'].nil?
-
-      # form parameters
-      form_params = opts[:form_params] || {}
-
-      # http body (model)
-      post_body = opts[:debug_body] || @api_client.object_to_http_body(create_vehicle_estimate_request)
-
-      # return_type
-      return_type = opts[:debug_return_type] || 'EstimateResponse'
-
-      # auth_names
-      auth_names = opts[:debug_auth_names] || ['bearer_auth']
-
-      new_options = opts.merge(
-        :operation => :"EstimatesApi.create_vehicle_estimate",
-        :header_params => header_params,
-        :query_params => query_params,
-        :form_params => form_params,
-        :body => post_body,
-        :auth_names => auth_names,
-        :return_type => return_type
-      )
-
-      data, status_code, headers = @api_client.call_api(:POST, local_var_path, new_options)
-      if @api_client.config.debugging
-        @api_client.config.logger.debug "API called: EstimatesApi#create_vehicle_estimate\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
-      end
-      return data, status_code, headers
-    end
-
     # Retrieves an estimate
     # Retrieves a given estimate and its associated order. You can only retrieve estimates associated with the organization you are querying for. 
     # @param id [String] 
@@ -1059,4 +834,4 @@ def retrieve_estimates_with_http_info(opts = {})
       return data, status_code, headers
     end
   end
-end
+end
\ No newline at end of file
diff --git a/lib/patch_ruby/api/order_line_items_api.rb b/lib/patch_ruby/api/order_line_items_api.rb
index 1bba60b..43baad4 100644
--- a/lib/patch_ruby/api/order_line_items_api.rb
+++ b/lib/patch_ruby/api/order_line_items_api.rb
@@ -266,4 +266,4 @@ def update_order_line_item_with_http_info(order_id, serial_number, update_order_
       return data, status_code, headers
     end
   end
-end
+end
\ No newline at end of file
diff --git a/lib/patch_ruby/api/orders_api.rb b/lib/patch_ruby/api/orders_api.rb
index 6d0a64a..141a079 100644
--- a/lib/patch_ruby/api/orders_api.rb
+++ b/lib/patch_ruby/api/orders_api.rb
@@ -460,4 +460,4 @@ def retrieve_orders_with_http_info(opts = {})
       return data, status_code, headers
     end
   end
-end
+end
\ No newline at end of file
diff --git a/lib/patch_ruby/api/projects_api.rb b/lib/patch_ruby/api/projects_api.rb
index b433bfe..f08d7ad 100644
--- a/lib/patch_ruby/api/projects_api.rb
+++ b/lib/patch_ruby/api/projects_api.rb
@@ -174,4 +174,4 @@ def retrieve_projects_with_http_info(opts = {})
       return data, status_code, headers
     end
   end
-end
+end
\ No newline at end of file
diff --git a/lib/patch_ruby/api/technology_types_api.rb b/lib/patch_ruby/api/technology_types_api.rb
index d343ae7..6362f3d 100644
--- a/lib/patch_ruby/api/technology_types_api.rb
+++ b/lib/patch_ruby/api/technology_types_api.rb
@@ -86,4 +86,4 @@ def retrieve_technology_types_with_http_info(opts = {})
       return data, status_code, headers
     end
   end
-end
+end
\ No newline at end of file
diff --git a/lib/patch_ruby/api_client.rb b/lib/patch_ruby/api_client.rb
index 6dbc3bf..d51c7f7 100644
--- a/lib/patch_ruby/api_client.rb
+++ b/lib/patch_ruby/api_client.rb
@@ -31,7 +31,7 @@ class ApiClient
     # @option config [Configuration] Configuration for initializing the object, default to Configuration.default
     def initialize(config = Configuration.default)
       @config = config
-      @user_agent = "patch-ruby/2.1.1"
+      @user_agent = "patch-ruby/2.3.0"
       @default_headers = {
         'Content-Type' => 'application/json',
         'User-Agent' => @user_agent
diff --git a/lib/patch_ruby/configuration.rb b/lib/patch_ruby/configuration.rb
index 5f3d2f2..c962e8c 100644
--- a/lib/patch_ruby/configuration.rb
+++ b/lib/patch_ruby/configuration.rb
@@ -242,7 +242,8 @@ def server_settings
     end
 
     def operation_server_settings
-      {}
+      {
+      }
     end
 
     # Returns URL based on server settings
diff --git a/lib/patch_ruby/models/create_ethereum_estimate_request.rb b/lib/patch_ruby/models/create_ethereum_estimate_request.rb
deleted file mode 100644
index f2a3043..0000000
--- a/lib/patch_ruby/models/create_ethereum_estimate_request.rb
+++ /dev/null
@@ -1,281 +0,0 @@
-=begin
-#Patch API V2
-
-#The core API used to integrate with Patch's service
-
-The version of the OpenAPI document: 2
-Contact: engineering@usepatch.com
-Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
-
-=end
-
-require 'date'
-require 'time'
-
-module Patch
-  class CreateEthereumEstimateRequest
-    attr_accessor :timestamp
-
-    attr_accessor :gas_used
-
-    attr_accessor :transaction_value_eth_gwei
-
-    attr_accessor :average_daily_balance_eth_gwei
-
-    attr_accessor :project_id
-
-    attr_accessor :create_order
-
-    # Attribute mapping from ruby-style variable name to JSON key.
-    def self.attribute_map
-      {
-        :'timestamp' => :'timestamp',
-        :'gas_used' => :'gas_used',
-        :'transaction_value_eth_gwei' => :'transaction_value_eth_gwei',
-        :'average_daily_balance_eth_gwei' => :'average_daily_balance_eth_gwei',
-        :'project_id' => :'project_id',
-        :'create_order' => :'create_order'
-      }
-    end
-
-    # Returns all the JSON keys this model knows about
-    def self.acceptable_attributes
-      attribute_map.values
-    end
-
-    # Attribute type mapping.
-    def self.openapi_types
-      {
-        :'timestamp' => :'String',
-        :'gas_used' => :'Integer',
-        :'transaction_value_eth_gwei' => :'Integer',
-        :'average_daily_balance_eth_gwei' => :'Integer',
-        :'project_id' => :'String',
-        :'create_order' => :'Boolean'
-      }
-    end
-
-    # List of attributes with nullable: true
-    def self.openapi_nullable
-      Set.new([
-        :'timestamp',
-        :'gas_used',
-        :'transaction_value_eth_gwei',
-        :'average_daily_balance_eth_gwei',
-        :'project_id',
-        :'create_order'
-      ])
-    end
-
-
-    # Allows models with corresponding API classes to delegate API operations to those API classes
-    # Exposes Model.operation_id which delegates to ModelsApi.new.operation_id
-    # Eg. Order.create_order delegates to OrdersApi.new.create_order
-    def self.method_missing(message, *args, &block)
-      if Object.const_defined?('Patch::CreateEthereumEstimateRequestsApi::OPERATIONS') && Patch::CreateEthereumEstimateRequestsApi::OPERATIONS.include?(message)
-        Patch::CreateEthereumEstimateRequestsApi.new.send(message, *args)
-      else
-        super
-      end
-    end
-
-    # Initializes the object
-    # @param [Hash] attributes Model attributes in the form of hash
-    def initialize(attributes = {})
-      if (!attributes.is_a?(Hash))
-        fail ArgumentError, "The input argument (attributes) must be a hash in `Patch::CreateEthereumEstimateRequest` initialize method"
-      end
-
-      # check to see if the attribute exists and convert string to symbol for hash key
-      attributes = attributes.each_with_object({}) { |(k, v), h|
-        if (!self.class.attribute_map.key?(k.to_sym))
-          fail ArgumentError, "`#{k}` is not a valid attribute in `Patch::CreateEthereumEstimateRequest`. Please check the name to make sure it's valid. List of attributes: " + self.class.attribute_map.keys.inspect
-        end
-        h[k.to_sym] = v
-      }
-
-      if attributes.key?(:'timestamp')
-        self.timestamp = attributes[:'timestamp']
-      end
-
-      if attributes.key?(:'gas_used')
-        self.gas_used = attributes[:'gas_used']
-      end
-
-      if attributes.key?(:'transaction_value_eth_gwei')
-        self.transaction_value_eth_gwei = attributes[:'transaction_value_eth_gwei']
-      end
-
-      if attributes.key?(:'average_daily_balance_eth_gwei')
-        self.average_daily_balance_eth_gwei = attributes[:'average_daily_balance_eth_gwei']
-      end
-
-      if attributes.key?(:'project_id')
-        self.project_id = attributes[:'project_id']
-      end
-
-      if attributes.key?(:'create_order')
-        self.create_order = attributes[:'create_order']
-      else
-        self.create_order = false
-      end
-    end
-
-    # Show invalid properties with the reasons. Usually used together with valid?
-    # @return Array for valid properties with the reasons
-    def list_invalid_properties
-      invalid_properties = Array.new
-      invalid_properties
-    end
-
-    # Check to see if the all the properties in the model are valid
-    # @return true if the model is valid
-    def valid?
-      true
-    end
-
-    # Checks equality by comparing each attribute.
-    # @param [Object] Object to be compared
-    def ==(o)
-      return true if self.equal?(o)
-      self.class == o.class &&
-          timestamp == o.timestamp &&
-          gas_used == o.gas_used &&
-          transaction_value_eth_gwei == o.transaction_value_eth_gwei &&
-          average_daily_balance_eth_gwei == o.average_daily_balance_eth_gwei &&
-          project_id == o.project_id &&
-          create_order == o.create_order
-    end
-
-    # @see the `==` method
-    # @param [Object] Object to be compared
-    def eql?(o)
-      self == o
-    end
-
-    # Calculates hash code according to all attributes.
-    # @return [Integer] Hash code
-    def hash
-      [timestamp, gas_used, transaction_value_eth_gwei, average_daily_balance_eth_gwei, project_id, create_order].hash
-    end
-
-    # Builds the object from hash
-    # @param [Hash] attributes Model attributes in the form of hash
-    # @return [Object] Returns the model itself
-    def self.build_from_hash(attributes)
-      new.build_from_hash(attributes)
-    end
-
-    # Builds the object from hash
-    # @param [Hash] attributes Model attributes in the form of hash
-    # @return [Object] Returns the model itself
-    def build_from_hash(attributes)
-      return nil unless attributes.is_a?(Hash)
-      self.class.openapi_types.each_pair do |key, type|
-        if attributes[self.class.attribute_map[key]].nil? && self.class.openapi_nullable.include?(key)
-          self.send("#{key}=", nil)
-        elsif type =~ /\AArray<(.*)>/i
-          # check to ensure the input is an array given that the attribute
-          # is documented as an array but the input is not
-          if attributes[self.class.attribute_map[key]].is_a?(Array)
-            self.send("#{key}=", attributes[self.class.attribute_map[key]].map { |v| _deserialize($1, v) })
-          end
-        elsif !attributes[self.class.attribute_map[key]].nil?
-          self.send("#{key}=", _deserialize(type, attributes[self.class.attribute_map[key]]))
-        end
-      end
-
-      self
-    end
-
-    # Deserializes the data based on type
-    # @param string type Data type
-    # @param string value Value to be deserialized
-    # @return [Object] Deserialized data
-    def _deserialize(type, value)
-      case type.to_sym
-      when :Time
-        Time.parse(value)
-      when :Date
-        Date.parse(value)
-      when :String
-        value.to_s
-      when :Integer
-        value.to_i
-      when :Float
-        value.to_f
-      when :Boolean
-        if value.to_s =~ /\A(true|t|yes|y|1)\z/i
-          true
-        else
-          false
-        end
-      when :Object
-        # generic object (usually a Hash), return directly
-        value
-      when /\AArray<(?<inner_type>.+)>\z/
-        inner_type = Regexp.last_match[:inner_type]
-        value.map { |v| _deserialize(inner_type, v) }
-      when /\AHash<(?<k_type>.+?), (?<v_type>.+)>\z/
-        k_type = Regexp.last_match[:k_type]
-        v_type = Regexp.last_match[:v_type]
-        {}.tap do |hash|
-          value.each do |k, v|
-            hash[_deserialize(k_type, k)] = _deserialize(v_type, v)
-          end
-        end
-      else # model
-        # models (e.g. Pet) or oneOf
-        klass = Patch.const_get(type)
-        klass.respond_to?(:openapi_one_of) ? klass.build(value) : klass.build_from_hash(value)
-      end
-    end
-
-    # Returns the string representation of the object
-    # @return [String] String presentation of the object
-    def to_s
-      to_hash.to_s
-    end
-
-    # to_body is an alias to to_hash (backward compatibility)
-    # @return [Hash] Returns the object in the form of hash
-    def to_body
-      to_hash
-    end
-
-    # Returns the object in the form of hash
-    # @return [Hash] Returns the object in the form of hash
-    def to_hash
-      hash = {}
-      self.class.attribute_map.each_pair do |attr, param|
-        value = self.send(attr)
-        if value.nil?
-          is_nullable = self.class.openapi_nullable.include?(attr)
-          next if !is_nullable || (is_nullable && !instance_variable_defined?(:"@#{attr}"))
-        end
-
-        hash[param] = _to_hash(value)
-      end
-      hash
-    end
-
-    # Outputs non-array value in the form of hash
-    # For object, use to_hash. Otherwise, just return the value
-    # @param [Object] value Any valid value
-    # @return [Hash] Returns the value in the form of hash
-    def _to_hash(value)
-      if value.is_a?(Array)
-        value.compact.map { |v| _to_hash(v) }
-      elsif value.is_a?(Hash)
-        {}.tap do |hash|
-          value.each { |k, v| hash[k] = _to_hash(v) }
-        end
-      elsif value.respond_to? :to_hash
-        value.to_hash
-      else
-        value
-      end
-    end
-  end
-end
diff --git a/lib/patch_ruby/models/create_order_line_item_request.rb b/lib/patch_ruby/models/create_order_line_item_request.rb
index ebead28..301f5c8 100644
--- a/lib/patch_ruby/models/create_order_line_item_request.rb
+++ b/lib/patch_ruby/models/create_order_line_item_request.rb
@@ -163,24 +163,24 @@ def initialize(attributes = {})
     # @return Array for valid properties with the reasons
     def list_invalid_properties
       invalid_properties = Array.new
-      if !@vintage_year.nil? && @vintage_year > 2100
-        invalid_properties.push('invalid value for "vintage_year", must be smaller than or equal to 2100.')
+      if !@vintage_year.nil? && @vintage_year > 2225
+        invalid_properties.push('invalid value for "vintage_year", must be smaller than or equal to 2225.')
       end
 
       if !@vintage_year.nil? && @vintage_year < 1900
         invalid_properties.push('invalid value for "vintage_year", must be greater than or equal to 1900.')
       end
 
-      if !@vintage_start_year.nil? && @vintage_start_year > 2100
-        invalid_properties.push('invalid value for "vintage_start_year", must be smaller than or equal to 2100.')
+      if !@vintage_start_year.nil? && @vintage_start_year > 2225
+        invalid_properties.push('invalid value for "vintage_start_year", must be smaller than or equal to 2225.')
       end
 
       if !@vintage_start_year.nil? && @vintage_start_year < 1900
         invalid_properties.push('invalid value for "vintage_start_year", must be greater than or equal to 1900.')
       end
 
-      if !@vintage_end_year.nil? && @vintage_end_year > 2100
-        invalid_properties.push('invalid value for "vintage_end_year", must be smaller than or equal to 2100.')
+      if !@vintage_end_year.nil? && @vintage_end_year > 2225
+        invalid_properties.push('invalid value for "vintage_end_year", must be smaller than or equal to 2225.')
       end
 
       if !@vintage_end_year.nil? && @vintage_end_year < 1900
@@ -205,16 +205,16 @@ def list_invalid_properties
     # Check to see if the all the properties in the model are valid
     # @return true if the model is valid
     def valid?
-      return false if !@vintage_year.nil? && @vintage_year > 2100
+      return false if !@vintage_year.nil? && @vintage_year > 2225
       return false if !@vintage_year.nil? && @vintage_year < 1900
-      return false if !@vintage_start_year.nil? && @vintage_start_year > 2100
+      return false if !@vintage_start_year.nil? && @vintage_start_year > 2225
       return false if !@vintage_start_year.nil? && @vintage_start_year < 1900
-      return false if !@vintage_end_year.nil? && @vintage_end_year > 2100
+      return false if !@vintage_end_year.nil? && @vintage_end_year > 2225
       return false if !@vintage_end_year.nil? && @vintage_end_year < 1900
       return false if !@price.nil? && @price < 2
       return false if !@amount.nil? && @amount > 100000000000000
       return false if !@amount.nil? && @amount < 0
-      unit_validator = EnumAttributeValidator.new('String', ["g", "Wh"])
+      unit_validator = EnumAttributeValidator.new('String', ["g"])
       return false unless unit_validator.valid?(@unit)
       true
     end
@@ -222,8 +222,8 @@ def valid?
     # Custom attribute writer method with validation
     # @param [Object] vintage_year Value to be assigned
     def vintage_year=(vintage_year)
-      if !vintage_year.nil? && vintage_year > 2100
-        fail ArgumentError, 'invalid value for "vintage_year", must be smaller than or equal to 2100.'
+      if !vintage_year.nil? && vintage_year > 2225
+        fail ArgumentError, 'invalid value for "vintage_year", must be smaller than or equal to 2225.'
       end
 
       if !vintage_year.nil? && vintage_year < 1900
@@ -236,8 +236,8 @@ def vintage_year=(vintage_year)
     # Custom attribute writer method with validation
     # @param [Object] vintage_start_year Value to be assigned
     def vintage_start_year=(vintage_start_year)
-      if !vintage_start_year.nil? && vintage_start_year > 2100
-        fail ArgumentError, 'invalid value for "vintage_start_year", must be smaller than or equal to 2100.'
+      if !vintage_start_year.nil? && vintage_start_year > 2225
+        fail ArgumentError, 'invalid value for "vintage_start_year", must be smaller than or equal to 2225.'
       end
 
       if !vintage_start_year.nil? && vintage_start_year < 1900
@@ -250,8 +250,8 @@ def vintage_start_year=(vintage_start_year)
     # Custom attribute writer method with validation
     # @param [Object] vintage_end_year Value to be assigned
     def vintage_end_year=(vintage_end_year)
-      if !vintage_end_year.nil? && vintage_end_year > 2100
-        fail ArgumentError, 'invalid value for "vintage_end_year", must be smaller than or equal to 2100.'
+      if !vintage_end_year.nil? && vintage_end_year > 2225
+        fail ArgumentError, 'invalid value for "vintage_end_year", must be smaller than or equal to 2225.'
       end
 
       if !vintage_end_year.nil? && vintage_end_year < 1900
@@ -288,7 +288,7 @@ def amount=(amount)
     # Custom attribute writer method checking allowed values (enum).
     # @param [Object] unit Object to be assigned
     def unit=(unit)
-      validator = EnumAttributeValidator.new('String', ["g", "Wh"])
+      validator = EnumAttributeValidator.new('String', ["g"])
       unless validator.valid?(unit)
         fail ArgumentError, "invalid value for \"unit\", must be one of #{validator.allowable_values}."
       end
diff --git a/lib/patch_ruby/models/create_order_request.rb b/lib/patch_ruby/models/create_order_request.rb
index 21fd5a4..0e38d3c 100644
--- a/lib/patch_ruby/models/create_order_request.rb
+++ b/lib/patch_ruby/models/create_order_request.rb
@@ -190,24 +190,24 @@ def initialize(attributes = {})
     # @return Array for valid properties with the reasons
     def list_invalid_properties
       invalid_properties = Array.new
-      if !@vintage_year.nil? && @vintage_year > 2100
-        invalid_properties.push('invalid value for "vintage_year", must be smaller than or equal to 2100.')
+      if !@vintage_year.nil? && @vintage_year > 2225
+        invalid_properties.push('invalid value for "vintage_year", must be smaller than or equal to 2225.')
       end
 
       if !@vintage_year.nil? && @vintage_year < 1900
         invalid_properties.push('invalid value for "vintage_year", must be greater than or equal to 1900.')
       end
 
-      if !@vintage_start_year.nil? && @vintage_start_year > 2100
-        invalid_properties.push('invalid value for "vintage_start_year", must be smaller than or equal to 2100.')
+      if !@vintage_start_year.nil? && @vintage_start_year > 2225
+        invalid_properties.push('invalid value for "vintage_start_year", must be smaller than or equal to 2225.')
       end
 
       if !@vintage_start_year.nil? && @vintage_start_year < 1900
         invalid_properties.push('invalid value for "vintage_start_year", must be greater than or equal to 1900.')
       end
 
-      if !@vintage_end_year.nil? && @vintage_end_year > 2100
-        invalid_properties.push('invalid value for "vintage_end_year", must be smaller than or equal to 2100.')
+      if !@vintage_end_year.nil? && @vintage_end_year > 2225
+        invalid_properties.push('invalid value for "vintage_end_year", must be smaller than or equal to 2225.')
       end
 
       if !@vintage_end_year.nil? && @vintage_end_year < 1900
@@ -234,16 +234,16 @@ def list_invalid_properties
     def valid?
       state_validator = EnumAttributeValidator.new('String', ["draft", "reserved", "placed"])
       return false unless state_validator.valid?(@state)
-      return false if !@vintage_year.nil? && @vintage_year > 2100
+      return false if !@vintage_year.nil? && @vintage_year > 2225
       return false if !@vintage_year.nil? && @vintage_year < 1900
-      return false if !@vintage_start_year.nil? && @vintage_start_year > 2100
+      return false if !@vintage_start_year.nil? && @vintage_start_year > 2225
       return false if !@vintage_start_year.nil? && @vintage_start_year < 1900
-      return false if !@vintage_end_year.nil? && @vintage_end_year > 2100
+      return false if !@vintage_end_year.nil? && @vintage_end_year > 2225
       return false if !@vintage_end_year.nil? && @vintage_end_year < 1900
       return false if !@total_price.nil? && @total_price < 2
       return false if !@amount.nil? && @amount > 100000000000000
       return false if !@amount.nil? && @amount < 0
-      unit_validator = EnumAttributeValidator.new('String', ["g", "Wh"])
+      unit_validator = EnumAttributeValidator.new('String', ["g"])
       return false unless unit_validator.valid?(@unit)
       true
     end
@@ -261,8 +261,8 @@ def state=(state)
     # Custom attribute writer method with validation
     # @param [Object] vintage_year Value to be assigned
     def vintage_year=(vintage_year)
-      if !vintage_year.nil? && vintage_year > 2100
-        fail ArgumentError, 'invalid value for "vintage_year", must be smaller than or equal to 2100.'
+      if !vintage_year.nil? && vintage_year > 2225
+        fail ArgumentError, 'invalid value for "vintage_year", must be smaller than or equal to 2225.'
       end
 
       if !vintage_year.nil? && vintage_year < 1900
@@ -275,8 +275,8 @@ def vintage_year=(vintage_year)
     # Custom attribute writer method with validation
     # @param [Object] vintage_start_year Value to be assigned
     def vintage_start_year=(vintage_start_year)
-      if !vintage_start_year.nil? && vintage_start_year > 2100
-        fail ArgumentError, 'invalid value for "vintage_start_year", must be smaller than or equal to 2100.'
+      if !vintage_start_year.nil? && vintage_start_year > 2225
+        fail ArgumentError, 'invalid value for "vintage_start_year", must be smaller than or equal to 2225.'
       end
 
       if !vintage_start_year.nil? && vintage_start_year < 1900
@@ -289,8 +289,8 @@ def vintage_start_year=(vintage_start_year)
     # Custom attribute writer method with validation
     # @param [Object] vintage_end_year Value to be assigned
     def vintage_end_year=(vintage_end_year)
-      if !vintage_end_year.nil? && vintage_end_year > 2100
-        fail ArgumentError, 'invalid value for "vintage_end_year", must be smaller than or equal to 2100.'
+      if !vintage_end_year.nil? && vintage_end_year > 2225
+        fail ArgumentError, 'invalid value for "vintage_end_year", must be smaller than or equal to 2225.'
       end
 
       if !vintage_end_year.nil? && vintage_end_year < 1900
@@ -327,7 +327,7 @@ def amount=(amount)
     # Custom attribute writer method checking allowed values (enum).
     # @param [Object] unit Object to be assigned
     def unit=(unit)
-      validator = EnumAttributeValidator.new('String', ["g", "Wh"])
+      validator = EnumAttributeValidator.new('String', ["g"])
       unless validator.valid?(unit)
         fail ArgumentError, "invalid value for \"unit\", must be one of #{validator.allowable_values}."
       end
diff --git a/lib/patch_ruby/models/create_shipping_estimate_request.rb b/lib/patch_ruby/models/create_shipping_estimate_request.rb
deleted file mode 100644
index c9b91af..0000000
--- a/lib/patch_ruby/models/create_shipping_estimate_request.rb
+++ /dev/null
@@ -1,373 +0,0 @@
-=begin
-#Patch API V2
-
-#The core API used to integrate with Patch's service
-
-The version of the OpenAPI document: 2
-Contact: engineering@usepatch.com
-Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
-
-=end
-
-require 'date'
-require 'time'
-
-module Patch
-  class CreateShippingEstimateRequest
-    attr_accessor :distance_m
-
-    attr_accessor :package_mass_g
-
-    attr_accessor :transportation_method
-
-    attr_accessor :project_id
-
-    attr_accessor :create_order
-
-    class EnumAttributeValidator
-      attr_reader :datatype
-      attr_reader :allowable_values
-
-      def initialize(datatype, allowable_values)
-        @allowable_values = allowable_values.map do |value|
-          case datatype.to_s
-          when /Integer/i
-            value.to_i
-          when /Float/i
-            value.to_f
-          else
-            value
-          end
-        end
-      end
-
-      def valid?(value)
-        !value || allowable_values.include?(value)
-      end
-    end
-
-    # Attribute mapping from ruby-style variable name to JSON key.
-    def self.attribute_map
-      {
-        :'distance_m' => :'distance_m',
-        :'package_mass_g' => :'package_mass_g',
-        :'transportation_method' => :'transportation_method',
-        :'project_id' => :'project_id',
-        :'create_order' => :'create_order'
-      }
-    end
-
-    # Returns all the JSON keys this model knows about
-    def self.acceptable_attributes
-      attribute_map.values
-    end
-
-    # Attribute type mapping.
-    def self.openapi_types
-      {
-        :'distance_m' => :'Integer',
-        :'package_mass_g' => :'Integer',
-        :'transportation_method' => :'String',
-        :'project_id' => :'String',
-        :'create_order' => :'Boolean'
-      }
-    end
-
-    # List of attributes with nullable: true
-    def self.openapi_nullable
-      Set.new([
-        :'project_id',
-        :'create_order'
-      ])
-    end
-
-
-    # Allows models with corresponding API classes to delegate API operations to those API classes
-    # Exposes Model.operation_id which delegates to ModelsApi.new.operation_id
-    # Eg. Order.create_order delegates to OrdersApi.new.create_order
-    def self.method_missing(message, *args, &block)
-      if Object.const_defined?('Patch::CreateShippingEstimateRequestsApi::OPERATIONS') && Patch::CreateShippingEstimateRequestsApi::OPERATIONS.include?(message)
-        Patch::CreateShippingEstimateRequestsApi.new.send(message, *args)
-      else
-        super
-      end
-    end
-
-    # Initializes the object
-    # @param [Hash] attributes Model attributes in the form of hash
-    def initialize(attributes = {})
-      if (!attributes.is_a?(Hash))
-        fail ArgumentError, "The input argument (attributes) must be a hash in `Patch::CreateShippingEstimateRequest` initialize method"
-      end
-
-      # check to see if the attribute exists and convert string to symbol for hash key
-      attributes = attributes.each_with_object({}) { |(k, v), h|
-        if (!self.class.attribute_map.key?(k.to_sym))
-          fail ArgumentError, "`#{k}` is not a valid attribute in `Patch::CreateShippingEstimateRequest`. Please check the name to make sure it's valid. List of attributes: " + self.class.attribute_map.keys.inspect
-        end
-        h[k.to_sym] = v
-      }
-
-      if attributes.key?(:'distance_m')
-        self.distance_m = attributes[:'distance_m']
-      end
-
-      if attributes.key?(:'package_mass_g')
-        self.package_mass_g = attributes[:'package_mass_g']
-      end
-
-      if attributes.key?(:'transportation_method')
-        self.transportation_method = attributes[:'transportation_method']
-      end
-
-      if attributes.key?(:'project_id')
-        self.project_id = attributes[:'project_id']
-      end
-
-      if attributes.key?(:'create_order')
-        self.create_order = attributes[:'create_order']
-      else
-        self.create_order = false
-      end
-    end
-
-    # Show invalid properties with the reasons. Usually used together with valid?
-    # @return Array for valid properties with the reasons
-    def list_invalid_properties
-      invalid_properties = Array.new
-      if @distance_m.nil?
-        invalid_properties.push('invalid value for "distance_m", distance_m cannot be nil.')
-      end
-
-      if @distance_m > 400000000
-        invalid_properties.push('invalid value for "distance_m", must be smaller than or equal to 400000000.')
-      end
-
-      if @distance_m < 0
-        invalid_properties.push('invalid value for "distance_m", must be greater than or equal to 0.')
-      end
-
-      if @package_mass_g.nil?
-        invalid_properties.push('invalid value for "package_mass_g", package_mass_g cannot be nil.')
-      end
-
-      if @package_mass_g > 2000000000
-        invalid_properties.push('invalid value for "package_mass_g", must be smaller than or equal to 2000000000.')
-      end
-
-      if @package_mass_g < 0
-        invalid_properties.push('invalid value for "package_mass_g", must be greater than or equal to 0.')
-      end
-
-      if @transportation_method.nil?
-        invalid_properties.push('invalid value for "transportation_method", transportation_method cannot be nil.')
-      end
-
-      invalid_properties
-    end
-
-    # Check to see if the all the properties in the model are valid
-    # @return true if the model is valid
-    def valid?
-      return false if @distance_m.nil?
-      return false if @distance_m > 400000000
-      return false if @distance_m < 0
-      return false if @package_mass_g.nil?
-      return false if @package_mass_g > 2000000000
-      return false if @package_mass_g < 0
-      return false if @transportation_method.nil?
-      transportation_method_validator = EnumAttributeValidator.new('String', ["air", "rail", "road", "sea"])
-      return false unless transportation_method_validator.valid?(@transportation_method)
-      true
-    end
-
-    # Custom attribute writer method with validation
-    # @param [Object] distance_m Value to be assigned
-    def distance_m=(distance_m)
-      if distance_m.nil?
-        fail ArgumentError, 'distance_m cannot be nil'
-      end
-
-      if distance_m > 400000000
-        fail ArgumentError, 'invalid value for "distance_m", must be smaller than or equal to 400000000.'
-      end
-
-      if distance_m < 0
-        fail ArgumentError, 'invalid value for "distance_m", must be greater than or equal to 0.'
-      end
-
-      @distance_m = distance_m
-    end
-
-    # Custom attribute writer method with validation
-    # @param [Object] package_mass_g Value to be assigned
-    def package_mass_g=(package_mass_g)
-      if package_mass_g.nil?
-        fail ArgumentError, 'package_mass_g cannot be nil'
-      end
-
-      if package_mass_g > 2000000000
-        fail ArgumentError, 'invalid value for "package_mass_g", must be smaller than or equal to 2000000000.'
-      end
-
-      if package_mass_g < 0
-        fail ArgumentError, 'invalid value for "package_mass_g", must be greater than or equal to 0.'
-      end
-
-      @package_mass_g = package_mass_g
-    end
-
-    # Custom attribute writer method checking allowed values (enum).
-    # @param [Object] transportation_method Object to be assigned
-    def transportation_method=(transportation_method)
-      validator = EnumAttributeValidator.new('String', ["air", "rail", "road", "sea"])
-      unless validator.valid?(transportation_method)
-        fail ArgumentError, "invalid value for \"transportation_method\", must be one of #{validator.allowable_values}."
-      end
-      @transportation_method = transportation_method
-    end
-
-    # Checks equality by comparing each attribute.
-    # @param [Object] Object to be compared
-    def ==(o)
-      return true if self.equal?(o)
-      self.class == o.class &&
-          distance_m == o.distance_m &&
-          package_mass_g == o.package_mass_g &&
-          transportation_method == o.transportation_method &&
-          project_id == o.project_id &&
-          create_order == o.create_order
-    end
-
-    # @see the `==` method
-    # @param [Object] Object to be compared
-    def eql?(o)
-      self == o
-    end
-
-    # Calculates hash code according to all attributes.
-    # @return [Integer] Hash code
-    def hash
-      [distance_m, package_mass_g, transportation_method, project_id, create_order].hash
-    end
-
-    # Builds the object from hash
-    # @param [Hash] attributes Model attributes in the form of hash
-    # @return [Object] Returns the model itself
-    def self.build_from_hash(attributes)
-      new.build_from_hash(attributes)
-    end
-
-    # Builds the object from hash
-    # @param [Hash] attributes Model attributes in the form of hash
-    # @return [Object] Returns the model itself
-    def build_from_hash(attributes)
-      return nil unless attributes.is_a?(Hash)
-      self.class.openapi_types.each_pair do |key, type|
-        if attributes[self.class.attribute_map[key]].nil? && self.class.openapi_nullable.include?(key)
-          self.send("#{key}=", nil)
-        elsif type =~ /\AArray<(.*)>/i
-          # check to ensure the input is an array given that the attribute
-          # is documented as an array but the input is not
-          if attributes[self.class.attribute_map[key]].is_a?(Array)
-            self.send("#{key}=", attributes[self.class.attribute_map[key]].map { |v| _deserialize($1, v) })
-          end
-        elsif !attributes[self.class.attribute_map[key]].nil?
-          self.send("#{key}=", _deserialize(type, attributes[self.class.attribute_map[key]]))
-        end
-      end
-
-      self
-    end
-
-    # Deserializes the data based on type
-    # @param string type Data type
-    # @param string value Value to be deserialized
-    # @return [Object] Deserialized data
-    def _deserialize(type, value)
-      case type.to_sym
-      when :Time
-        Time.parse(value)
-      when :Date
-        Date.parse(value)
-      when :String
-        value.to_s
-      when :Integer
-        value.to_i
-      when :Float
-        value.to_f
-      when :Boolean
-        if value.to_s =~ /\A(true|t|yes|y|1)\z/i
-          true
-        else
-          false
-        end
-      when :Object
-        # generic object (usually a Hash), return directly
-        value
-      when /\AArray<(?<inner_type>.+)>\z/
-        inner_type = Regexp.last_match[:inner_type]
-        value.map { |v| _deserialize(inner_type, v) }
-      when /\AHash<(?<k_type>.+?), (?<v_type>.+)>\z/
-        k_type = Regexp.last_match[:k_type]
-        v_type = Regexp.last_match[:v_type]
-        {}.tap do |hash|
-          value.each do |k, v|
-            hash[_deserialize(k_type, k)] = _deserialize(v_type, v)
-          end
-        end
-      else # model
-        # models (e.g. Pet) or oneOf
-        klass = Patch.const_get(type)
-        klass.respond_to?(:openapi_one_of) ? klass.build(value) : klass.build_from_hash(value)
-      end
-    end
-
-    # Returns the string representation of the object
-    # @return [String] String presentation of the object
-    def to_s
-      to_hash.to_s
-    end
-
-    # to_body is an alias to to_hash (backward compatibility)
-    # @return [Hash] Returns the object in the form of hash
-    def to_body
-      to_hash
-    end
-
-    # Returns the object in the form of hash
-    # @return [Hash] Returns the object in the form of hash
-    def to_hash
-      hash = {}
-      self.class.attribute_map.each_pair do |attr, param|
-        value = self.send(attr)
-        if value.nil?
-          is_nullable = self.class.openapi_nullable.include?(attr)
-          next if !is_nullable || (is_nullable && !instance_variable_defined?(:"@#{attr}"))
-        end
-
-        hash[param] = _to_hash(value)
-      end
-      hash
-    end
-
-    # Outputs non-array value in the form of hash
-    # For object, use to_hash. Otherwise, just return the value
-    # @param [Object] value Any valid value
-    # @return [Hash] Returns the value in the form of hash
-    def _to_hash(value)
-      if value.is_a?(Array)
-        value.compact.map { |v| _to_hash(v) }
-      elsif value.is_a?(Hash)
-        {}.tap do |hash|
-          value.each { |k, v| hash[k] = _to_hash(v) }
-        end
-      elsif value.respond_to? :to_hash
-        value.to_hash
-      else
-        value
-      end
-    end
-  end
-end
diff --git a/lib/patch_ruby/models/create_vehicle_estimate_request.rb b/lib/patch_ruby/models/create_vehicle_estimate_request.rb
deleted file mode 100644
index 102096f..0000000
--- a/lib/patch_ruby/models/create_vehicle_estimate_request.rb
+++ /dev/null
@@ -1,328 +0,0 @@
-=begin
-#Patch API V2
-
-#The core API used to integrate with Patch's service
-
-The version of the OpenAPI document: 2
-Contact: engineering@usepatch.com
-Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
-
-=end
-
-require 'date'
-require 'time'
-
-module Patch
-  class CreateVehicleEstimateRequest
-    attr_accessor :distance_m
-
-    attr_accessor :make
-
-    attr_accessor :model
-
-    attr_accessor :year
-
-    attr_accessor :project_id
-
-    attr_accessor :create_order
-
-    # Attribute mapping from ruby-style variable name to JSON key.
-    def self.attribute_map
-      {
-        :'distance_m' => :'distance_m',
-        :'make' => :'make',
-        :'model' => :'model',
-        :'year' => :'year',
-        :'project_id' => :'project_id',
-        :'create_order' => :'create_order'
-      }
-    end
-
-    # Returns all the JSON keys this model knows about
-    def self.acceptable_attributes
-      attribute_map.values
-    end
-
-    # Attribute type mapping.
-    def self.openapi_types
-      {
-        :'distance_m' => :'Integer',
-        :'make' => :'String',
-        :'model' => :'String',
-        :'year' => :'Integer',
-        :'project_id' => :'String',
-        :'create_order' => :'Boolean'
-      }
-    end
-
-    # List of attributes with nullable: true
-    def self.openapi_nullable
-      Set.new([
-        :'make',
-        :'model',
-        :'year',
-        :'project_id',
-        :'create_order'
-      ])
-    end
-
-
-    # Allows models with corresponding API classes to delegate API operations to those API classes
-    # Exposes Model.operation_id which delegates to ModelsApi.new.operation_id
-    # Eg. Order.create_order delegates to OrdersApi.new.create_order
-    def self.method_missing(message, *args, &block)
-      if Object.const_defined?('Patch::CreateVehicleEstimateRequestsApi::OPERATIONS') && Patch::CreateVehicleEstimateRequestsApi::OPERATIONS.include?(message)
-        Patch::CreateVehicleEstimateRequestsApi.new.send(message, *args)
-      else
-        super
-      end
-    end
-
-    # Initializes the object
-    # @param [Hash] attributes Model attributes in the form of hash
-    def initialize(attributes = {})
-      if (!attributes.is_a?(Hash))
-        fail ArgumentError, "The input argument (attributes) must be a hash in `Patch::CreateVehicleEstimateRequest` initialize method"
-      end
-
-      # check to see if the attribute exists and convert string to symbol for hash key
-      attributes = attributes.each_with_object({}) { |(k, v), h|
-        if (!self.class.attribute_map.key?(k.to_sym))
-          fail ArgumentError, "`#{k}` is not a valid attribute in `Patch::CreateVehicleEstimateRequest`. Please check the name to make sure it's valid. List of attributes: " + self.class.attribute_map.keys.inspect
-        end
-        h[k.to_sym] = v
-      }
-
-      if attributes.key?(:'distance_m')
-        self.distance_m = attributes[:'distance_m']
-      end
-
-      if attributes.key?(:'make')
-        self.make = attributes[:'make']
-      end
-
-      if attributes.key?(:'model')
-        self.model = attributes[:'model']
-      end
-
-      if attributes.key?(:'year')
-        self.year = attributes[:'year']
-      end
-
-      if attributes.key?(:'project_id')
-        self.project_id = attributes[:'project_id']
-      end
-
-      if attributes.key?(:'create_order')
-        self.create_order = attributes[:'create_order']
-      else
-        self.create_order = false
-      end
-    end
-
-    # Show invalid properties with the reasons. Usually used together with valid?
-    # @return Array for valid properties with the reasons
-    def list_invalid_properties
-      invalid_properties = Array.new
-      if @distance_m.nil?
-        invalid_properties.push('invalid value for "distance_m", distance_m cannot be nil.')
-      end
-
-      if @distance_m > 400000000
-        invalid_properties.push('invalid value for "distance_m", must be smaller than or equal to 400000000.')
-      end
-
-      if @distance_m < 0
-        invalid_properties.push('invalid value for "distance_m", must be greater than or equal to 0.')
-      end
-
-      if !@year.nil? && @year < 1900
-        invalid_properties.push('invalid value for "year", must be greater than or equal to 1900.')
-      end
-
-      invalid_properties
-    end
-
-    # Check to see if the all the properties in the model are valid
-    # @return true if the model is valid
-    def valid?
-      return false if @distance_m.nil?
-      return false if @distance_m > 400000000
-      return false if @distance_m < 0
-      return false if !@year.nil? && @year < 1900
-      true
-    end
-
-    # Custom attribute writer method with validation
-    # @param [Object] distance_m Value to be assigned
-    def distance_m=(distance_m)
-      if distance_m.nil?
-        fail ArgumentError, 'distance_m cannot be nil'
-      end
-
-      if distance_m > 400000000
-        fail ArgumentError, 'invalid value for "distance_m", must be smaller than or equal to 400000000.'
-      end
-
-      if distance_m < 0
-        fail ArgumentError, 'invalid value for "distance_m", must be greater than or equal to 0.'
-      end
-
-      @distance_m = distance_m
-    end
-
-    # Custom attribute writer method with validation
-    # @param [Object] year Value to be assigned
-    def year=(year)
-      if !year.nil? && year < 1900
-        fail ArgumentError, 'invalid value for "year", must be greater than or equal to 1900.'
-      end
-
-      @year = year
-    end
-
-    # Checks equality by comparing each attribute.
-    # @param [Object] Object to be compared
-    def ==(o)
-      return true if self.equal?(o)
-      self.class == o.class &&
-          distance_m == o.distance_m &&
-          make == o.make &&
-          model == o.model &&
-          year == o.year &&
-          project_id == o.project_id &&
-          create_order == o.create_order
-    end
-
-    # @see the `==` method
-    # @param [Object] Object to be compared
-    def eql?(o)
-      self == o
-    end
-
-    # Calculates hash code according to all attributes.
-    # @return [Integer] Hash code
-    def hash
-      [distance_m, make, model, year, project_id, create_order].hash
-    end
-
-    # Builds the object from hash
-    # @param [Hash] attributes Model attributes in the form of hash
-    # @return [Object] Returns the model itself
-    def self.build_from_hash(attributes)
-      new.build_from_hash(attributes)
-    end
-
-    # Builds the object from hash
-    # @param [Hash] attributes Model attributes in the form of hash
-    # @return [Object] Returns the model itself
-    def build_from_hash(attributes)
-      return nil unless attributes.is_a?(Hash)
-      self.class.openapi_types.each_pair do |key, type|
-        if attributes[self.class.attribute_map[key]].nil? && self.class.openapi_nullable.include?(key)
-          self.send("#{key}=", nil)
-        elsif type =~ /\AArray<(.*)>/i
-          # check to ensure the input is an array given that the attribute
-          # is documented as an array but the input is not
-          if attributes[self.class.attribute_map[key]].is_a?(Array)
-            self.send("#{key}=", attributes[self.class.attribute_map[key]].map { |v| _deserialize($1, v) })
-          end
-        elsif !attributes[self.class.attribute_map[key]].nil?
-          self.send("#{key}=", _deserialize(type, attributes[self.class.attribute_map[key]]))
-        end
-      end
-
-      self
-    end
-
-    # Deserializes the data based on type
-    # @param string type Data type
-    # @param string value Value to be deserialized
-    # @return [Object] Deserialized data
-    def _deserialize(type, value)
-      case type.to_sym
-      when :Time
-        Time.parse(value)
-      when :Date
-        Date.parse(value)
-      when :String
-        value.to_s
-      when :Integer
-        value.to_i
-      when :Float
-        value.to_f
-      when :Boolean
-        if value.to_s =~ /\A(true|t|yes|y|1)\z/i
-          true
-        else
-          false
-        end
-      when :Object
-        # generic object (usually a Hash), return directly
-        value
-      when /\AArray<(?<inner_type>.+)>\z/
-        inner_type = Regexp.last_match[:inner_type]
-        value.map { |v| _deserialize(inner_type, v) }
-      when /\AHash<(?<k_type>.+?), (?<v_type>.+)>\z/
-        k_type = Regexp.last_match[:k_type]
-        v_type = Regexp.last_match[:v_type]
-        {}.tap do |hash|
-          value.each do |k, v|
-            hash[_deserialize(k_type, k)] = _deserialize(v_type, v)
-          end
-        end
-      else # model
-        # models (e.g. Pet) or oneOf
-        klass = Patch.const_get(type)
-        klass.respond_to?(:openapi_one_of) ? klass.build(value) : klass.build_from_hash(value)
-      end
-    end
-
-    # Returns the string representation of the object
-    # @return [String] String presentation of the object
-    def to_s
-      to_hash.to_s
-    end
-
-    # to_body is an alias to to_hash (backward compatibility)
-    # @return [Hash] Returns the object in the form of hash
-    def to_body
-      to_hash
-    end
-
-    # Returns the object in the form of hash
-    # @return [Hash] Returns the object in the form of hash
-    def to_hash
-      hash = {}
-      self.class.attribute_map.each_pair do |attr, param|
-        value = self.send(attr)
-        if value.nil?
-          is_nullable = self.class.openapi_nullable.include?(attr)
-          next if !is_nullable || (is_nullable && !instance_variable_defined?(:"@#{attr}"))
-        end
-
-        hash[param] = _to_hash(value)
-      end
-      hash
-    end
-
-    # Outputs non-array value in the form of hash
-    # For object, use to_hash. Otherwise, just return the value
-    # @param [Object] value Any valid value
-    # @return [Hash] Returns the value in the form of hash
-    def _to_hash(value)
-      if value.is_a?(Array)
-        value.compact.map { |v| _to_hash(v) }
-      elsif value.is_a?(Hash)
-        {}.tap do |hash|
-          value.each { |k, v| hash[k] = _to_hash(v) }
-        end
-      elsif value.respond_to? :to_hash
-        value.to_hash
-      else
-        value
-      end
-    end
-  end
-end
diff --git a/lib/patch_ruby/models/estimate.rb b/lib/patch_ruby/models/estimate.rb
index 5597f5e..2bc4312 100644
--- a/lib/patch_ruby/models/estimate.rb
+++ b/lib/patch_ruby/models/estimate.rb
@@ -21,7 +21,7 @@ class Estimate
     # A boolean indicating if this estimate is a production or demo mode estimate.
     attr_accessor :production
 
-    # The type of estimate. Available types are mass, flight, shipping, vehicle, and crypto.
+    # The type of estimate. Available types are mass, flight, shipping, and crypto.
     attr_accessor :type
 
     # The estimated mass in grams for this estimate.
diff --git a/lib/patch_ruby/models/project.rb b/lib/patch_ruby/models/project.rb
index 4cd9ee2..4f73b54 100644
--- a/lib/patch_ruby/models/project.rb
+++ b/lib/patch_ruby/models/project.rb
@@ -65,7 +65,7 @@ class Project
 
     attr_accessor :technology_type
 
-    # An array of objects containing the highlight's slug, title, and a URL for the corresponding icon. A highlight's title is a short string that spotlights a characteristic about the project.
+    # DEPRECATED. An array of objects containing the highlight's slug, title, and a URL for the corresponding icon. A highlight's title is a short string that spotlights a characteristic about the project. Highlights are deprecated and not populated for recent projects.
     attr_accessor :highlights
 
     # An array of objects containing available inventory for a project. Available inventory is grouped by a project's vintage year and returns amount and pricing available for a given vintage year.
diff --git a/lib/patch_ruby/models/update_order_line_item_request.rb b/lib/patch_ruby/models/update_order_line_item_request.rb
index 4951464..1b2adc5 100644
--- a/lib/patch_ruby/models/update_order_line_item_request.rb
+++ b/lib/patch_ruby/models/update_order_line_item_request.rb
@@ -155,24 +155,24 @@ def initialize(attributes = {})
     # @return Array for valid properties with the reasons
     def list_invalid_properties
       invalid_properties = Array.new
-      if !@vintage_year.nil? && @vintage_year > 2100
-        invalid_properties.push('invalid value for "vintage_year", must be smaller than or equal to 2100.')
+      if !@vintage_year.nil? && @vintage_year > 2225
+        invalid_properties.push('invalid value for "vintage_year", must be smaller than or equal to 2225.')
       end
 
       if !@vintage_year.nil? && @vintage_year < 1900
         invalid_properties.push('invalid value for "vintage_year", must be greater than or equal to 1900.')
       end
 
-      if !@vintage_start_year.nil? && @vintage_start_year > 2100
-        invalid_properties.push('invalid value for "vintage_start_year", must be smaller than or equal to 2100.')
+      if !@vintage_start_year.nil? && @vintage_start_year > 2225
+        invalid_properties.push('invalid value for "vintage_start_year", must be smaller than or equal to 2225.')
       end
 
       if !@vintage_start_year.nil? && @vintage_start_year < 1900
         invalid_properties.push('invalid value for "vintage_start_year", must be greater than or equal to 1900.')
       end
 
-      if !@vintage_end_year.nil? && @vintage_end_year > 2100
-        invalid_properties.push('invalid value for "vintage_end_year", must be smaller than or equal to 2100.')
+      if !@vintage_end_year.nil? && @vintage_end_year > 2225
+        invalid_properties.push('invalid value for "vintage_end_year", must be smaller than or equal to 2225.')
       end
 
       if !@vintage_end_year.nil? && @vintage_end_year < 1900
@@ -197,16 +197,16 @@ def list_invalid_properties
     # Check to see if the all the properties in the model are valid
     # @return true if the model is valid
     def valid?
-      return false if !@vintage_year.nil? && @vintage_year > 2100
+      return false if !@vintage_year.nil? && @vintage_year > 2225
       return false if !@vintage_year.nil? && @vintage_year < 1900
-      return false if !@vintage_start_year.nil? && @vintage_start_year > 2100
+      return false if !@vintage_start_year.nil? && @vintage_start_year > 2225
       return false if !@vintage_start_year.nil? && @vintage_start_year < 1900
-      return false if !@vintage_end_year.nil? && @vintage_end_year > 2100
+      return false if !@vintage_end_year.nil? && @vintage_end_year > 2225
       return false if !@vintage_end_year.nil? && @vintage_end_year < 1900
       return false if !@price.nil? && @price < 2
       return false if !@amount.nil? && @amount > 100000000000000
       return false if !@amount.nil? && @amount < 0
-      unit_validator = EnumAttributeValidator.new('String', ["g", "Wh"])
+      unit_validator = EnumAttributeValidator.new('String', ["g"])
       return false unless unit_validator.valid?(@unit)
       true
     end
@@ -214,8 +214,8 @@ def valid?
     # Custom attribute writer method with validation
     # @param [Object] vintage_year Value to be assigned
     def vintage_year=(vintage_year)
-      if !vintage_year.nil? && vintage_year > 2100
-        fail ArgumentError, 'invalid value for "vintage_year", must be smaller than or equal to 2100.'
+      if !vintage_year.nil? && vintage_year > 2225
+        fail ArgumentError, 'invalid value for "vintage_year", must be smaller than or equal to 2225.'
       end
 
       if !vintage_year.nil? && vintage_year < 1900
@@ -228,8 +228,8 @@ def vintage_year=(vintage_year)
     # Custom attribute writer method with validation
     # @param [Object] vintage_start_year Value to be assigned
     def vintage_start_year=(vintage_start_year)
-      if !vintage_start_year.nil? && vintage_start_year > 2100
-        fail ArgumentError, 'invalid value for "vintage_start_year", must be smaller than or equal to 2100.'
+      if !vintage_start_year.nil? && vintage_start_year > 2225
+        fail ArgumentError, 'invalid value for "vintage_start_year", must be smaller than or equal to 2225.'
       end
 
       if !vintage_start_year.nil? && vintage_start_year < 1900
@@ -242,8 +242,8 @@ def vintage_start_year=(vintage_start_year)
     # Custom attribute writer method with validation
     # @param [Object] vintage_end_year Value to be assigned
     def vintage_end_year=(vintage_end_year)
-      if !vintage_end_year.nil? && vintage_end_year > 2100
-        fail ArgumentError, 'invalid value for "vintage_end_year", must be smaller than or equal to 2100.'
+      if !vintage_end_year.nil? && vintage_end_year > 2225
+        fail ArgumentError, 'invalid value for "vintage_end_year", must be smaller than or equal to 2225.'
       end
 
       if !vintage_end_year.nil? && vintage_end_year < 1900
@@ -280,7 +280,7 @@ def amount=(amount)
     # Custom attribute writer method checking allowed values (enum).
     # @param [Object] unit Object to be assigned
     def unit=(unit)
-      validator = EnumAttributeValidator.new('String', ["g", "Wh"])
+      validator = EnumAttributeValidator.new('String', ["g"])
       unless validator.valid?(unit)
         fail ArgumentError, "invalid value for \"unit\", must be one of #{validator.allowable_values}."
       end
diff --git a/lib/patch_ruby/version.rb b/lib/patch_ruby/version.rb
index 4326681..13c6d98 100644
--- a/lib/patch_ruby/version.rb
+++ b/lib/patch_ruby/version.rb
@@ -11,5 +11,5 @@
 =end
 
 module Patch
-  VERSION = '2.1.1'
+  VERSION = '2.3.0'
 end
diff --git a/patch_ruby.gemspec b/patch_ruby.gemspec
index 1c73231..4920436 100644
--- a/patch_ruby.gemspec
+++ b/patch_ruby.gemspec
@@ -41,4 +41,4 @@ Gem::Specification.new do |s|
   s.add_development_dependency 'pry'
   # End custom
 
-end
+end
\ No newline at end of file
diff --git a/spec/integration/estimates_spec.rb b/spec/integration/estimates_spec.rb
index 8cd71d0..51d6bd7 100644
--- a/spec/integration/estimates_spec.rb
+++ b/spec/integration/estimates_spec.rb
@@ -45,51 +45,6 @@
     expect(flight_estimate_longer.data.mass_g).to be > 2 * flight_estimate.data.mass_g
   end
 
-  it 'supports creating vehicle estimates' do
-    distance_m = 10_000
-    make = "Toyota"
-    model = "Corolla"
-    year = 2000
-
-    vehicle_estimate = Patch::Estimate.create_vehicle_estimate(
-      distance_m: distance_m,
-      make: make,
-      model: model,
-      year: year,
-      create_order: true
-    )
-
-    expect(vehicle_estimate.data.type).to eq 'vehicle'
-    expect(vehicle_estimate.data.mass_g).to be >= 1_000
-    expect(vehicle_estimate.data.order.amount).to be >= 1_000
-  end
-
-  it 'supports creating vehicle estimates with partial information' do
-    distance_m = 10_000
-
-    vehicle_estimate = Patch::Estimate.create_vehicle_estimate(
-      distance_m: distance_m,
-      create_order: false
-    )
-
-    expect(vehicle_estimate.data.type).to eq 'vehicle'
-    expect(vehicle_estimate.data.mass_g).to eq 2_132
-  end
-
-  it 'supports creating shipping estimates' do
-    distance_m = 100_000_000
-    package_mass_g = 10_000
-    create_estimate_response = Patch::Estimate.create_shipping_estimate(
-      distance_m: distance_m,
-      package_mass_g: package_mass_g,
-      transportation_method: 'rail',
-      create_order: false
-    )
-
-    expect(create_estimate_response.data.type).to eq 'ecommerce'
-    expect(create_estimate_response.data.mass_g).to be >= 10_000
-  end
-
   it 'supports creating bitcoin estimates with partial information' do
     bitcoin_estimate = Patch::Estimate.create_bitcoin_estimate()
 
@@ -136,26 +91,6 @@
     expect(bitcoin_estimate_1.data.mass_g).to be < bitcoin_estimate_2.data.mass_g
   end
 
-  it 'supports creating ethereum estimates with a gas amount' do
-    ethereum_estimate = Patch::Estimate.create_ethereum_estimate(
-      gas_used: 100
-    )
-
-    ethereum_estimate_2 = Patch::Estimate.create_ethereum_estimate(
-      gas_used: 1000
-    )
-
-    expect(ethereum_estimate.data.type).to eq 'ethereum'
-    expect(ethereum_estimate.data.mass_g).to be < ethereum_estimate_2.data.mass_g
-  end
-
-  it 'supports creating ethereum estimates with partial information' do
-    ethereum_estimate = Patch::Estimate.create_ethereum_estimate({ create_order: false })
-
-    expect(ethereum_estimate.data.type).to eq 'ethereum'
-    expect(ethereum_estimate.data.mass_g).to be >= 2_000
-  end
-
   it 'supports creating hotel estimates' do
     create_estimate_response = Patch::Estimate.create_hotel_estimate(
       country_code: "US",