content: /*
   * The Selling Partner API for FBA inbound operations.
   * The Selling Partner API for Fulfillment By Amazon (FBA) Inbound. The FBA Inbound API enables building inbound workflows to create, manage, and send shipments into Amazon's fulfillment network. The API has interoperability with the Send-to-Amazon user interface.
   *
   * OpenAPI spec version: 2024-03-20
   *
   *
   * NOTE: This class is auto generated by the swagger code generator program.
   * https://github.com/swagger-api/swagger-codegen.git
   * Do not edit the class manually.
   */
  
  
  package io.swagger.client.api.fbav2024;
  
  import io.swagger.client.ApiCallback;
  import io.swagger.client.ApiClient;
  import io.swagger.client.ApiException;
  import io.swagger.client.ApiResponse;
  import io.swagger.client.Configuration;
  import io.swagger.client.Pair;
  import io.swagger.client.ProgressRequestBody;
  import io.swagger.client.ProgressResponseBody;
  import io.swagger.client.StringUtil;
  
  import com.google.gson.reflect.TypeToken;
  
  import java.io.IOException;
  
  
  import io.swagger.client.model.fbav2024.CancelInboundPlanResponse;
  import io.swagger.client.model.fbav2024.CancelSelfShipAppointmentRequest;
  import io.swagger.client.model.fbav2024.CancelSelfShipAppointmentResponse;
  import io.swagger.client.model.fbav2024.ConfirmDeliveryWindowOptionsResponse;
  import io.swagger.client.model.fbav2024.ConfirmPackingOptionResponse;
  import io.swagger.client.model.fbav2024.ConfirmPlacementOptionResponse;
  import io.swagger.client.model.fbav2024.ConfirmShipmentContentUpdatePreviewResponse;
  import io.swagger.client.model.fbav2024.ConfirmTransportationOptionsRequest;
  import io.swagger.client.model.fbav2024.ConfirmTransportationOptionsResponse;
  import io.swagger.client.model.fbav2024.ContentUpdatePreview;
  import io.swagger.client.model.fbav2024.CreateInboundPlanRequest;
  import io.swagger.client.model.fbav2024.CreateInboundPlanResponse;
  import io.swagger.client.model.fbav2024.CreateMarketplaceItemLabelsRequest;
  import io.swagger.client.model.fbav2024.CreateMarketplaceItemLabelsResponse;
  import io.swagger.client.model.fbav2024.ErrorList;
  import io.swagger.client.model.fbav2024.GenerateDeliveryWindowOptionsResponse;
  import io.swagger.client.model.fbav2024.GeneratePackingOptionsResponse;
  import io.swagger.client.model.fbav2024.GeneratePlacementOptionsRequest;
  import io.swagger.client.model.fbav2024.GeneratePlacementOptionsResponse;
  import io.swagger.client.model.fbav2024.GenerateSelfShipAppointmentSlotsRequest;
  import io.swagger.client.model.fbav2024.GenerateSelfShipAppointmentSlotsResponse;
  import io.swagger.client.model.fbav2024.GenerateShipmentContentUpdatePreviewsRequest;
  import io.swagger.client.model.fbav2024.GenerateShipmentContentUpdatePreviewsResponse;
  import io.swagger.client.model.fbav2024.GenerateTransportationOptionsRequest;
  import io.swagger.client.model.fbav2024.GenerateTransportationOptionsResponse;
  import io.swagger.client.model.fbav2024.GetDeliveryChallanDocumentResponse;
  import io.swagger.client.model.fbav2024.GetSelfShipAppointmentSlotsResponse;
  import io.swagger.client.model.fbav2024.InboundOperationStatus;
  import io.swagger.client.model.fbav2024.InboundPlan;
  import io.swagger.client.model.fbav2024.ListDeliveryWindowOptionsResponse;
  import io.swagger.client.model.fbav2024.ListInboundPlanBoxesResponse;
  import io.swagger.client.model.fbav2024.ListInboundPlanItemsResponse;
  import io.swagger.client.model.fbav2024.ListInboundPlanPalletsResponse;
  import io.swagger.client.model.fbav2024.ListInboundPlansResponse;
  import io.swagger.client.model.fbav2024.ListItemComplianceDetailsResponse;
  import io.swagger.client.model.fbav2024.ListPackingGroupBoxesResponse;
  import io.swagger.client.model.fbav2024.ListPackingGroupItemsResponse;
  import io.swagger.client.model.fbav2024.ListPackingOptionsResponse;
  import io.swagger.client.model.fbav2024.ListPlacementOptionsResponse;
  import io.swagger.client.model.fbav2024.ListShipmentBoxesResponse;
  import io.swagger.client.model.fbav2024.ListShipmentContentUpdatePreviewsResponse;
  import io.swagger.client.model.fbav2024.ListShipmentItemsResponse;
  import io.swagger.client.model.fbav2024.ListShipmentPalletsResponse;
  import io.swagger.client.model.fbav2024.ListTransportationOptionsResponse;
  import io.swagger.client.model.fbav2024.ScheduleSelfShipAppointmentRequest;
  import io.swagger.client.model.fbav2024.ScheduleSelfShipAppointmentResponse;
  import io.swagger.client.model.fbav2024.SetPackingInformationRequest;
  import io.swagger.client.model.fbav2024.SetPackingInformationResponse;
  import io.swagger.client.model.fbav2024.Shipment;
  import io.swagger.client.model.fbav2024.UpdateInboundPlanNameRequest;
  import io.swagger.client.model.fbav2024.UpdateItemComplianceDetailsRequest;
  import io.swagger.client.model.fbav2024.UpdateItemComplianceDetailsResponse;
  import io.swagger.client.model.fbav2024.UpdateShipmentNameRequest;
  import io.swagger.client.model.fbav2024.UpdateShipmentSourceAddressRequest;
  import io.swagger.client.model.fbav2024.UpdateShipmentSourceAddressResponse;
  import io.swagger.client.model.fbav2024.UpdateShipmentTrackingDetailsRequest;
  import io.swagger.client.model.fbav2024.UpdateShipmentTrackingDetailsResponse;
  
  import java.lang.reflect.Type;
  import java.util.ArrayList;
  import java.util.HashMap;
  import java.util.List;
  import java.util.Map;
  
  import com.amazon.SellingPartnerAPIAA.LWAAccessTokenCache;
  import com.amazon.SellingPartnerAPIAA.LWAAccessTokenCacheImpl;
  import com.amazon.SellingPartnerAPIAA.LWAAuthorizationCredentials;
  import com.amazon.SellingPartnerAPIAA.LWAAuthorizationSigner;
  import com.amazon.SellingPartnerAPIAA.RateLimitConfiguration;
  import com.amazon.SellingPartnerAPIAA.LWAException;
  
  public class FbaInboundApi {
      private ApiClient apiClient;
  
      FbaInboundApi() {
          this(Configuration.getDefaultApiClient());
      }
  
      public FbaInboundApi(ApiClient apiClient) {
          this.apiClient = apiClient;
      }
  
      public ApiClient getApiClient() {
          return apiClient;
      }
  
      public void setApiClient(ApiClient apiClient) {
          this.apiClient = apiClient;
      }
  
      /**
       * Build call for cancelInboundPlan
       *
       * @param inboundPlanId           Identifier of an inbound plan. (required)
       * @param progressListener        Progress listener
       * @param progressRequestListener Progress request listener
       * @return Call to execute
       * @throws ApiException If fail to serialize the request body object
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public com.squareup.okhttp.Call cancelInboundPlanCall(String inboundPlanId, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException, LWAException {
          Object localVarPostBody = null;
  
          // create path and map variables
          String localVarPath = "/inbound/fba/2024-03-20/inboundPlans/{inboundPlanId}/cancellation"
                  .replaceAll("\\{" + "inboundPlanId" + "\\}", apiClient.escapeString(inboundPlanId));
  
          List<Pair> localVarQueryParams = new ArrayList<Pair>();
          List<Pair> localVarCollectionQueryParams = new ArrayList<Pair>();
  
          Map<String, String> localVarHeaderParams = new HashMap<String, String>();
  
          Map<String, Object> localVarFormParams = new HashMap<String, Object>();
  
          final String[] localVarAccepts = {
                  "application/json"
          };
          final String localVarAccept = apiClient.selectHeaderAccept(localVarAccepts);
          if (localVarAccept != null) localVarHeaderParams.put("Accept", localVarAccept);
  
          final String[] localVarContentTypes = {
                  "application/json"
          };
          final String localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes);
          localVarHeaderParams.put("Content-Type", localVarContentType);
  
          if (progressListener != null) {
              apiClient.getHttpClient().networkInterceptors().add(new com.squareup.okhttp.Interceptor() {
                  @Override
                  public com.squareup.okhttp.Response intercept(com.squareup.okhttp.Interceptor.Chain chain) throws IOException {
                      com.squareup.okhttp.Response originalResponse = chain.proceed(chain.request());
                      return originalResponse.newBuilder()
                              .body(new ProgressResponseBody(originalResponse.body(), progressListener))
                              .build();
                  }
              });
          }
  
          String[] localVarAuthNames = new String[]{};
          return apiClient.buildCall(localVarPath, "PUT", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarFormParams, localVarAuthNames, progressRequestListener);
      }
  
      @SuppressWarnings("rawtypes")
      private com.squareup.okhttp.Call cancelInboundPlanValidateBeforeCall(String inboundPlanId, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException, LWAException {
  
          // verify the required parameter 'inboundPlanId' is set
          if (inboundPlanId == null) {
              throw new ApiException("Missing the required parameter 'inboundPlanId' when calling cancelInboundPlan(Async)");
          }
  
  
          com.squareup.okhttp.Call call = cancelInboundPlanCall(inboundPlanId, progressListener, progressRequestListener);
          return call;
  
      }
  
      /**
       * Cancels an Inbound Plan. Charges may apply if the cancellation is performed outside of a void window. The window for Amazon Partnered Carriers is 24 hours for Small Parcel Delivery (SPD) and one hour for Less-Than-Truckload (LTL) carrier shipments.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 2 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId Identifier of an inbound plan. (required)
       * @return CancelInboundPlanResponse
       * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public CancelInboundPlanResponse cancelInboundPlan(String inboundPlanId) throws ApiException, LWAException {
          ApiResponse<CancelInboundPlanResponse> resp = cancelInboundPlanWithHttpInfo(inboundPlanId);
          return resp.getData();
      }
  
      /**
       * Cancels an Inbound Plan. Charges may apply if the cancellation is performed outside of a void window. The window for Amazon Partnered Carriers is 24 hours for Small Parcel Delivery (SPD) and one hour for Less-Than-Truckload (LTL) carrier shipments.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 2 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId Identifier of an inbound plan. (required)
       * @return ApiResponse&lt;CancelInboundPlanResponse&gt;
       * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public ApiResponse<CancelInboundPlanResponse> cancelInboundPlanWithHttpInfo(String inboundPlanId) throws ApiException, LWAException {
          com.squareup.okhttp.Call call = cancelInboundPlanValidateBeforeCall(inboundPlanId, null, null);
          Type localVarReturnType = new TypeToken<CancelInboundPlanResponse>() {
          }.getType();
          return apiClient.execute(call, localVarReturnType);
      }
  
      /**
       * (asynchronously)
       * Cancels an Inbound Plan. Charges may apply if the cancellation is performed outside of a void window. The window for Amazon Partnered Carriers is 24 hours for Small Parcel Delivery (SPD) and one hour for Less-Than-Truckload (LTL) carrier shipments.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 2 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId Identifier of an inbound plan. (required)
       * @param callback      The callback to be executed when the API call finishes
       * @return The request call
       * @throws ApiException If fail to process the API call, e.g. serializing the request body object
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public com.squareup.okhttp.Call cancelInboundPlanAsync(String inboundPlanId, final ApiCallback<CancelInboundPlanResponse> callback) throws ApiException, LWAException {
  
          ProgressResponseBody.ProgressListener progressListener = null;
          ProgressRequestBody.ProgressRequestListener progressRequestListener = null;
  
          if (callback != null) {
              progressListener = new ProgressResponseBody.ProgressListener() {
                  @Override
                  public void update(long bytesRead, long contentLength, boolean done) {
                      callback.onDownloadProgress(bytesRead, contentLength, done);
                  }
              };
  
              progressRequestListener = new ProgressRequestBody.ProgressRequestListener() {
                  @Override
                  public void onRequestProgress(long bytesWritten, long contentLength, boolean done) {
                      callback.onUploadProgress(bytesWritten, contentLength, done);
                  }
              };
          }
  
          com.squareup.okhttp.Call call = cancelInboundPlanValidateBeforeCall(inboundPlanId, progressListener, progressRequestListener);
          Type localVarReturnType = new TypeToken<CancelInboundPlanResponse>() {
          }.getType();
          apiClient.executeAsync(call, localVarReturnType, callback);
          return call;
      }
  
      /**
       * Build call for cancelSelfShipAppointment
       *
       * @param inboundPlanId           Identifier of an inbound plan. (required)
       * @param shipmentId              Identifier of a shipment. A shipment contains the boxes and units being inbounded. (required)
       * @param body                    The body of the request to &#x60;cancelSelfShipAppointment&#x60;. (required)
       * @param progressListener        Progress listener
       * @param progressRequestListener Progress request listener
       * @return Call to execute
       * @throws ApiException If fail to serialize the request body object
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public com.squareup.okhttp.Call cancelSelfShipAppointmentCall(String inboundPlanId, String shipmentId, CancelSelfShipAppointmentRequest body, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException, LWAException {
          Object localVarPostBody = body;
  
          // create path and map variables
          String localVarPath = "/inbound/fba/2024-03-20/inboundPlans/{inboundPlanId}/shipments/{shipmentId}/selfShipAppointmentCancellation"
                  .replaceAll("\\{" + "inboundPlanId" + "\\}", apiClient.escapeString(inboundPlanId))
                  .replaceAll("\\{" + "shipmentId" + "\\}", apiClient.escapeString(shipmentId));
  
          List<Pair> localVarQueryParams = new ArrayList<Pair>();
          List<Pair> localVarCollectionQueryParams = new ArrayList<Pair>();
  
          Map<String, String> localVarHeaderParams = new HashMap<String, String>();
  
          Map<String, Object> localVarFormParams = new HashMap<String, Object>();
  
          final String[] localVarAccepts = {
                  "application/json"
          };
          final String localVarAccept = apiClient.selectHeaderAccept(localVarAccepts);
          if (localVarAccept != null) localVarHeaderParams.put("Accept", localVarAccept);
  
          final String[] localVarContentTypes = {
                  "application/json"
          };
          final String localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes);
          localVarHeaderParams.put("Content-Type", localVarContentType);
  
          if (progressListener != null) {
              apiClient.getHttpClient().networkInterceptors().add(new com.squareup.okhttp.Interceptor() {
                  @Override
                  public com.squareup.okhttp.Response intercept(com.squareup.okhttp.Interceptor.Chain chain) throws IOException {
                      com.squareup.okhttp.Response originalResponse = chain.proceed(chain.request());
                      return originalResponse.newBuilder()
                              .body(new ProgressResponseBody(originalResponse.body(), progressListener))
                              .build();
                  }
              });
          }
  
          String[] localVarAuthNames = new String[]{};
          return apiClient.buildCall(localVarPath, "PUT", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarFormParams, localVarAuthNames, progressRequestListener);
      }
  
      @SuppressWarnings("rawtypes")
      private com.squareup.okhttp.Call cancelSelfShipAppointmentValidateBeforeCall(String inboundPlanId, String shipmentId, CancelSelfShipAppointmentRequest body, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException, LWAException {
  
          // verify the required parameter 'inboundPlanId' is set
          if (inboundPlanId == null) {
              throw new ApiException("Missing the required parameter 'inboundPlanId' when calling cancelSelfShipAppointment(Async)");
          }
  
          // verify the required parameter 'shipmentId' is set
          if (shipmentId == null) {
              throw new ApiException("Missing the required parameter 'shipmentId' when calling cancelSelfShipAppointment(Async)");
          }
  
          // verify the required parameter 'body' is set
          if (body == null) {
              throw new ApiException("Missing the required parameter 'body' when calling cancelSelfShipAppointment(Async)");
          }
  
  
          com.squareup.okhttp.Call call = cancelSelfShipAppointmentCall(inboundPlanId, shipmentId, body, progressListener, progressRequestListener);
          return call;
  
      }
  
      /**
       * Cancels a self-ship appointment slot against a shipment.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 30 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId Identifier of an inbound plan. (required)
       * @param shipmentId    Identifier of a shipment. A shipment contains the boxes and units being inbounded. (required)
       * @param body          The body of the request to &#x60;cancelSelfShipAppointment&#x60;. (required)
       * @return CancelSelfShipAppointmentResponse
       * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public CancelSelfShipAppointmentResponse cancelSelfShipAppointment(String inboundPlanId, String shipmentId, CancelSelfShipAppointmentRequest body) throws ApiException, LWAException {
          ApiResponse<CancelSelfShipAppointmentResponse> resp = cancelSelfShipAppointmentWithHttpInfo(inboundPlanId, shipmentId, body);
          return resp.getData();
      }
  
      /**
       * Cancels a self-ship appointment slot against a shipment.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 30 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId Identifier of an inbound plan. (required)
       * @param shipmentId    Identifier of a shipment. A shipment contains the boxes and units being inbounded. (required)
       * @param body          The body of the request to &#x60;cancelSelfShipAppointment&#x60;. (required)
       * @return ApiResponse&lt;CancelSelfShipAppointmentResponse&gt;
       * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public ApiResponse<CancelSelfShipAppointmentResponse> cancelSelfShipAppointmentWithHttpInfo(String inboundPlanId, String shipmentId, CancelSelfShipAppointmentRequest body) throws ApiException, LWAException {
          com.squareup.okhttp.Call call = cancelSelfShipAppointmentValidateBeforeCall(inboundPlanId, shipmentId, body, null, null);
          Type localVarReturnType = new TypeToken<CancelSelfShipAppointmentResponse>() {
          }.getType();
          return apiClient.execute(call, localVarReturnType);
      }
  
      /**
       * (asynchronously)
       * Cancels a self-ship appointment slot against a shipment.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 30 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId Identifier of an inbound plan. (required)
       * @param shipmentId    Identifier of a shipment. A shipment contains the boxes and units being inbounded. (required)
       * @param body          The body of the request to &#x60;cancelSelfShipAppointment&#x60;. (required)
       * @param callback      The callback to be executed when the API call finishes
       * @return The request call
       * @throws ApiException If fail to process the API call, e.g. serializing the request body object
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public com.squareup.okhttp.Call cancelSelfShipAppointmentAsync(String inboundPlanId, String shipmentId, CancelSelfShipAppointmentRequest body, final ApiCallback<CancelSelfShipAppointmentResponse> callback) throws ApiException, LWAException {
  
          ProgressResponseBody.ProgressListener progressListener = null;
          ProgressRequestBody.ProgressRequestListener progressRequestListener = null;
  
          if (callback != null) {
              progressListener = new ProgressResponseBody.ProgressListener() {
                  @Override
                  public void update(long bytesRead, long contentLength, boolean done) {
                      callback.onDownloadProgress(bytesRead, contentLength, done);
                  }
              };
  
              progressRequestListener = new ProgressRequestBody.ProgressRequestListener() {
                  @Override
                  public void onRequestProgress(long bytesWritten, long contentLength, boolean done) {
                      callback.onUploadProgress(bytesWritten, contentLength, done);
                  }
              };
          }
  
          com.squareup.okhttp.Call call = cancelSelfShipAppointmentValidateBeforeCall(inboundPlanId, shipmentId, body, progressListener, progressRequestListener);
          Type localVarReturnType = new TypeToken<CancelSelfShipAppointmentResponse>() {
          }.getType();
          apiClient.executeAsync(call, localVarReturnType, callback);
          return call;
      }
  
      /**
       * Build call for confirmDeliveryWindowOptions
       *
       * @param inboundPlanId           Identifier of an inbound plan. (required)
       * @param shipmentId              The shipment to confirm the delivery window option for. (required)
       * @param deliveryWindowOptionId  The id of the delivery window option to be confirmed. (required)
       * @param progressListener        Progress listener
       * @param progressRequestListener Progress request listener
       * @return Call to execute
       * @throws ApiException If fail to serialize the request body object
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public com.squareup.okhttp.Call confirmDeliveryWindowOptionsCall(String inboundPlanId, String shipmentId, String deliveryWindowOptionId, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException, LWAException {
          Object localVarPostBody = null;
  
          // create path and map variables
          String localVarPath = "/inbound/fba/2024-03-20/inboundPlans/{inboundPlanId}/shipments/{shipmentId}/deliveryWindowOptions/{deliveryWindowOptionId}/confirmation"
                  .replaceAll("\\{" + "inboundPlanId" + "\\}", apiClient.escapeString(inboundPlanId))
                  .replaceAll("\\{" + "shipmentId" + "\\}", apiClient.escapeString(shipmentId))
                  .replaceAll("\\{" + "deliveryWindowOptionId" + "\\}", apiClient.escapeString(deliveryWindowOptionId));
  
          List<Pair> localVarQueryParams = new ArrayList<Pair>();
          List<Pair> localVarCollectionQueryParams = new ArrayList<Pair>();
  
          Map<String, String> localVarHeaderParams = new HashMap<String, String>();
  
          Map<String, Object> localVarFormParams = new HashMap<String, Object>();
  
          final String[] localVarAccepts = {
                  "application/json"
          };
          final String localVarAccept = apiClient.selectHeaderAccept(localVarAccepts);
          if (localVarAccept != null) localVarHeaderParams.put("Accept", localVarAccept);
  
          final String[] localVarContentTypes = {
                  "application/json"
          };
          final String localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes);
          localVarHeaderParams.put("Content-Type", localVarContentType);
  
          if (progressListener != null) {
              apiClient.getHttpClient().networkInterceptors().add(new com.squareup.okhttp.Interceptor() {
                  @Override
                  public com.squareup.okhttp.Response intercept(com.squareup.okhttp.Interceptor.Chain chain) throws IOException {
                      com.squareup.okhttp.Response originalResponse = chain.proceed(chain.request());
                      return originalResponse.newBuilder()
                              .body(new ProgressResponseBody(originalResponse.body(), progressListener))
                              .build();
                  }
              });
          }
  
          String[] localVarAuthNames = new String[]{};
          return apiClient.buildCall(localVarPath, "POST", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarFormParams, localVarAuthNames, progressRequestListener);
      }
  
      @SuppressWarnings("rawtypes")
      private com.squareup.okhttp.Call confirmDeliveryWindowOptionsValidateBeforeCall(String inboundPlanId, String shipmentId, String deliveryWindowOptionId, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException, LWAException {
  
          // verify the required parameter 'inboundPlanId' is set
          if (inboundPlanId == null) {
              throw new ApiException("Missing the required parameter 'inboundPlanId' when calling confirmDeliveryWindowOptions(Async)");
          }
  
          // verify the required parameter 'shipmentId' is set
          if (shipmentId == null) {
              throw new ApiException("Missing the required parameter 'shipmentId' when calling confirmDeliveryWindowOptions(Async)");
          }
  
          // verify the required parameter 'deliveryWindowOptionId' is set
          if (deliveryWindowOptionId == null) {
              throw new ApiException("Missing the required parameter 'deliveryWindowOptionId' when calling confirmDeliveryWindowOptions(Async)");
          }
  
  
          com.squareup.okhttp.Call call = confirmDeliveryWindowOptionsCall(inboundPlanId, shipmentId, deliveryWindowOptionId, progressListener, progressRequestListener);
          return call;
  
      }
  
      /**
       * Confirms the delivery window option for chosen shipment within an inbound plan. A placement option must be confirmed prior to use of this API. Once confirmed, new delivery window options cannot be generated, but the chosen delivery window option can be updated before shipment closure. The window is used to provide the expected time when a shipment will arrive at the warehouse. All transportation options which have the program &#x60;CONFIRMED_DELIVERY_WINDOW&#x60; require a delivery window to be confirmed prior to transportation option confirmation.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 30 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId          Identifier of an inbound plan. (required)
       * @param shipmentId             The shipment to confirm the delivery window option for. (required)
       * @param deliveryWindowOptionId The id of the delivery window option to be confirmed. (required)
       * @return ConfirmDeliveryWindowOptionsResponse
       * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public ConfirmDeliveryWindowOptionsResponse confirmDeliveryWindowOptions(String inboundPlanId, String shipmentId, String deliveryWindowOptionId) throws ApiException, LWAException {
          ApiResponse<ConfirmDeliveryWindowOptionsResponse> resp = confirmDeliveryWindowOptionsWithHttpInfo(inboundPlanId, shipmentId, deliveryWindowOptionId);
          return resp.getData();
      }
  
      /**
       * Confirms the delivery window option for chosen shipment within an inbound plan. A placement option must be confirmed prior to use of this API. Once confirmed, new delivery window options cannot be generated, but the chosen delivery window option can be updated before shipment closure. The window is used to provide the expected time when a shipment will arrive at the warehouse. All transportation options which have the program &#x60;CONFIRMED_DELIVERY_WINDOW&#x60; require a delivery window to be confirmed prior to transportation option confirmation.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 30 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId          Identifier of an inbound plan. (required)
       * @param shipmentId             The shipment to confirm the delivery window option for. (required)
       * @param deliveryWindowOptionId The id of the delivery window option to be confirmed. (required)
       * @return ApiResponse&lt;ConfirmDeliveryWindowOptionsResponse&gt;
       * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public ApiResponse<ConfirmDeliveryWindowOptionsResponse> confirmDeliveryWindowOptionsWithHttpInfo(String inboundPlanId, String shipmentId, String deliveryWindowOptionId) throws ApiException, LWAException {
          com.squareup.okhttp.Call call = confirmDeliveryWindowOptionsValidateBeforeCall(inboundPlanId, shipmentId, deliveryWindowOptionId, null, null);
          Type localVarReturnType = new TypeToken<ConfirmDeliveryWindowOptionsResponse>() {
          }.getType();
          return apiClient.execute(call, localVarReturnType);
      }
  
      /**
       * (asynchronously)
       * Confirms the delivery window option for chosen shipment within an inbound plan. A placement option must be confirmed prior to use of this API. Once confirmed, new delivery window options cannot be generated, but the chosen delivery window option can be updated before shipment closure. The window is used to provide the expected time when a shipment will arrive at the warehouse. All transportation options which have the program &#x60;CONFIRMED_DELIVERY_WINDOW&#x60; require a delivery window to be confirmed prior to transportation option confirmation.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 30 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId          Identifier of an inbound plan. (required)
       * @param shipmentId             The shipment to confirm the delivery window option for. (required)
       * @param deliveryWindowOptionId The id of the delivery window option to be confirmed. (required)
       * @param callback               The callback to be executed when the API call finishes
       * @return The request call
       * @throws ApiException If fail to process the API call, e.g. serializing the request body object
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public com.squareup.okhttp.Call confirmDeliveryWindowOptionsAsync(String inboundPlanId, String shipmentId, String deliveryWindowOptionId, final ApiCallback<ConfirmDeliveryWindowOptionsResponse> callback) throws ApiException, LWAException {
  
          ProgressResponseBody.ProgressListener progressListener = null;
          ProgressRequestBody.ProgressRequestListener progressRequestListener = null;
  
          if (callback != null) {
              progressListener = new ProgressResponseBody.ProgressListener() {
                  @Override
                  public void update(long bytesRead, long contentLength, boolean done) {
                      callback.onDownloadProgress(bytesRead, contentLength, done);
                  }
              };
  
              progressRequestListener = new ProgressRequestBody.ProgressRequestListener() {
                  @Override
                  public void onRequestProgress(long bytesWritten, long contentLength, boolean done) {
                      callback.onUploadProgress(bytesWritten, contentLength, done);
                  }
              };
          }
  
          com.squareup.okhttp.Call call = confirmDeliveryWindowOptionsValidateBeforeCall(inboundPlanId, shipmentId, deliveryWindowOptionId, progressListener, progressRequestListener);
          Type localVarReturnType = new TypeToken<ConfirmDeliveryWindowOptionsResponse>() {
          }.getType();
          apiClient.executeAsync(call, localVarReturnType, callback);
          return call;
      }
  
      /**
       * Build call for confirmPackingOption
       *
       * @param inboundPlanId           Identifier of an inbound plan. (required)
       * @param packingOptionId         Identifier of a packing option. (required)
       * @param progressListener        Progress listener
       * @param progressRequestListener Progress request listener
       * @return Call to execute
       * @throws ApiException If fail to serialize the request body object
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public com.squareup.okhttp.Call confirmPackingOptionCall(String inboundPlanId, String packingOptionId, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException, LWAException {
          Object localVarPostBody = null;
  
          // create path and map variables
          String localVarPath = "/inbound/fba/2024-03-20/inboundPlans/{inboundPlanId}/packingOptions/{packingOptionId}/confirmation"
                  .replaceAll("\\{" + "inboundPlanId" + "\\}", apiClient.escapeString(inboundPlanId))
                  .replaceAll("\\{" + "packingOptionId" + "\\}", apiClient.escapeString(packingOptionId));
  
          List<Pair> localVarQueryParams = new ArrayList<Pair>();
          List<Pair> localVarCollectionQueryParams = new ArrayList<Pair>();
  
          Map<String, String> localVarHeaderParams = new HashMap<String, String>();
  
          Map<String, Object> localVarFormParams = new HashMap<String, Object>();
  
          final String[] localVarAccepts = {
                  "application/json"
          };
          final String localVarAccept = apiClient.selectHeaderAccept(localVarAccepts);
          if (localVarAccept != null) localVarHeaderParams.put("Accept", localVarAccept);
  
          final String[] localVarContentTypes = {
                  "application/json"
          };
          final String localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes);
          localVarHeaderParams.put("Content-Type", localVarContentType);
  
          if (progressListener != null) {
              apiClient.getHttpClient().networkInterceptors().add(new com.squareup.okhttp.Interceptor() {
                  @Override
                  public com.squareup.okhttp.Response intercept(com.squareup.okhttp.Interceptor.Chain chain) throws IOException {
                      com.squareup.okhttp.Response originalResponse = chain.proceed(chain.request());
                      return originalResponse.newBuilder()
                              .body(new ProgressResponseBody(originalResponse.body(), progressListener))
                              .build();
                  }
              });
          }
  
          String[] localVarAuthNames = new String[]{};
          return apiClient.buildCall(localVarPath, "POST", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarFormParams, localVarAuthNames, progressRequestListener);
      }
  
      @SuppressWarnings("rawtypes")
      private com.squareup.okhttp.Call confirmPackingOptionValidateBeforeCall(String inboundPlanId, String packingOptionId, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException, LWAException {
  
          // verify the required parameter 'inboundPlanId' is set
          if (inboundPlanId == null) {
              throw new ApiException("Missing the required parameter 'inboundPlanId' when calling confirmPackingOption(Async)");
          }
  
          // verify the required parameter 'packingOptionId' is set
          if (packingOptionId == null) {
              throw new ApiException("Missing the required parameter 'packingOptionId' when calling confirmPackingOption(Async)");
          }
  
  
          com.squareup.okhttp.Call call = confirmPackingOptionCall(inboundPlanId, packingOptionId, progressListener, progressRequestListener);
          return call;
  
      }
  
      /**
       * Confirms the packing option for an inbound plan.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 2 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId   Identifier of an inbound plan. (required)
       * @param packingOptionId Identifier of a packing option. (required)
       * @return ConfirmPackingOptionResponse
       * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public ConfirmPackingOptionResponse confirmPackingOption(String inboundPlanId, String packingOptionId) throws ApiException, LWAException {
          ApiResponse<ConfirmPackingOptionResponse> resp = confirmPackingOptionWithHttpInfo(inboundPlanId, packingOptionId);
          return resp.getData();
      }
  
      /**
       * Confirms the packing option for an inbound plan.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 2 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId   Identifier of an inbound plan. (required)
       * @param packingOptionId Identifier of a packing option. (required)
       * @return ApiResponse&lt;ConfirmPackingOptionResponse&gt;
       * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public ApiResponse<ConfirmPackingOptionResponse> confirmPackingOptionWithHttpInfo(String inboundPlanId, String packingOptionId) throws ApiException, LWAException {
          com.squareup.okhttp.Call call = confirmPackingOptionValidateBeforeCall(inboundPlanId, packingOptionId, null, null);
          Type localVarReturnType = new TypeToken<ConfirmPackingOptionResponse>() {
          }.getType();
          return apiClient.execute(call, localVarReturnType);
      }
  
      /**
       * (asynchronously)
       * Confirms the packing option for an inbound plan.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 2 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId   Identifier of an inbound plan. (required)
       * @param packingOptionId Identifier of a packing option. (required)
       * @param callback        The callback to be executed when the API call finishes
       * @return The request call
       * @throws ApiException If fail to process the API call, e.g. serializing the request body object
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public com.squareup.okhttp.Call confirmPackingOptionAsync(String inboundPlanId, String packingOptionId, final ApiCallback<ConfirmPackingOptionResponse> callback) throws ApiException, LWAException {
  
          ProgressResponseBody.ProgressListener progressListener = null;
          ProgressRequestBody.ProgressRequestListener progressRequestListener = null;
  
          if (callback != null) {
              progressListener = new ProgressResponseBody.ProgressListener() {
                  @Override
                  public void update(long bytesRead, long contentLength, boolean done) {
                      callback.onDownloadProgress(bytesRead, contentLength, done);
                  }
              };
  
              progressRequestListener = new ProgressRequestBody.ProgressRequestListener() {
                  @Override
                  public void onRequestProgress(long bytesWritten, long contentLength, boolean done) {
                      callback.onUploadProgress(bytesWritten, contentLength, done);
                  }
              };
          }
  
          com.squareup.okhttp.Call call = confirmPackingOptionValidateBeforeCall(inboundPlanId, packingOptionId, progressListener, progressRequestListener);
          Type localVarReturnType = new TypeToken<ConfirmPackingOptionResponse>() {
          }.getType();
          apiClient.executeAsync(call, localVarReturnType, callback);
          return call;
      }
  
      /**
       * Build call for confirmPlacementOption
       *
       * @param inboundPlanId           Identifier of an inbound plan. (required)
       * @param placementOptionId       The identifier of a placement option. A placement option represents the shipment splits and destinations of SKUs. (required)
       * @param progressListener        Progress listener
       * @param progressRequestListener Progress request listener
       * @return Call to execute
       * @throws ApiException If fail to serialize the request body object
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public com.squareup.okhttp.Call confirmPlacementOptionCall(String inboundPlanId, String placementOptionId, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException, LWAException {
          Object localVarPostBody = null;
  
          // create path and map variables
          String localVarPath = "/inbound/fba/2024-03-20/inboundPlans/{inboundPlanId}/placementOptions/{placementOptionId}/confirmation"
                  .replaceAll("\\{" + "inboundPlanId" + "\\}", apiClient.escapeString(inboundPlanId))
                  .replaceAll("\\{" + "placementOptionId" + "\\}", apiClient.escapeString(placementOptionId));
  
          List<Pair> localVarQueryParams = new ArrayList<Pair>();
          List<Pair> localVarCollectionQueryParams = new ArrayList<Pair>();
  
          Map<String, String> localVarHeaderParams = new HashMap<String, String>();
  
          Map<String, Object> localVarFormParams = new HashMap<String, Object>();
  
          final String[] localVarAccepts = {
                  "application/json"
          };
          final String localVarAccept = apiClient.selectHeaderAccept(localVarAccepts);
          if (localVarAccept != null) localVarHeaderParams.put("Accept", localVarAccept);
  
          final String[] localVarContentTypes = {
                  "application/json"
          };
          final String localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes);
          localVarHeaderParams.put("Content-Type", localVarContentType);
  
          if (progressListener != null) {
              apiClient.getHttpClient().networkInterceptors().add(new com.squareup.okhttp.Interceptor() {
                  @Override
                  public com.squareup.okhttp.Response intercept(com.squareup.okhttp.Interceptor.Chain chain) throws IOException {
                      com.squareup.okhttp.Response originalResponse = chain.proceed(chain.request());
                      return originalResponse.newBuilder()
                              .body(new ProgressResponseBody(originalResponse.body(), progressListener))
                              .build();
                  }
              });
          }
  
          String[] localVarAuthNames = new String[]{};
          return apiClient.buildCall(localVarPath, "POST", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarFormParams, localVarAuthNames, progressRequestListener);
      }
  
      @SuppressWarnings("rawtypes")
      private com.squareup.okhttp.Call confirmPlacementOptionValidateBeforeCall(String inboundPlanId, String placementOptionId, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException, LWAException {
  
          // verify the required parameter 'inboundPlanId' is set
          if (inboundPlanId == null) {
              throw new ApiException("Missing the required parameter 'inboundPlanId' when calling confirmPlacementOption(Async)");
          }
  
          // verify the required parameter 'placementOptionId' is set
          if (placementOptionId == null) {
              throw new ApiException("Missing the required parameter 'placementOptionId' when calling confirmPlacementOption(Async)");
          }
  
  
          com.squareup.okhttp.Call call = confirmPlacementOptionCall(inboundPlanId, placementOptionId, progressListener, progressRequestListener);
          return call;
  
      }
  
      /**
       * Confirms the placement option for an inbound plan. Once confirmed, it cannot be changed for the Inbound Plan.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 2 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId     Identifier of an inbound plan. (required)
       * @param placementOptionId The identifier of a placement option. A placement option represents the shipment splits and destinations of SKUs. (required)
       * @return ConfirmPlacementOptionResponse
       * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public ConfirmPlacementOptionResponse confirmPlacementOption(String inboundPlanId, String placementOptionId) throws ApiException, LWAException {
          ApiResponse<ConfirmPlacementOptionResponse> resp = confirmPlacementOptionWithHttpInfo(inboundPlanId, placementOptionId);
          return resp.getData();
      }
  
      /**
       * Confirms the placement option for an inbound plan. Once confirmed, it cannot be changed for the Inbound Plan.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 2 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId     Identifier of an inbound plan. (required)
       * @param placementOptionId The identifier of a placement option. A placement option represents the shipment splits and destinations of SKUs. (required)
       * @return ApiResponse&lt;ConfirmPlacementOptionResponse&gt;
       * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public ApiResponse<ConfirmPlacementOptionResponse> confirmPlacementOptionWithHttpInfo(String inboundPlanId, String placementOptionId) throws ApiException, LWAException {
          com.squareup.okhttp.Call call = confirmPlacementOptionValidateBeforeCall(inboundPlanId, placementOptionId, null, null);
          Type localVarReturnType = new TypeToken<ConfirmPlacementOptionResponse>() {
          }.getType();
          return apiClient.execute(call, localVarReturnType);
      }
  
      /**
       * (asynchronously)
       * Confirms the placement option for an inbound plan. Once confirmed, it cannot be changed for the Inbound Plan.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 2 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId     Identifier of an inbound plan. (required)
       * @param placementOptionId The identifier of a placement option. A placement option represents the shipment splits and destinations of SKUs. (required)
       * @param callback          The callback to be executed when the API call finishes
       * @return The request call
       * @throws ApiException If fail to process the API call, e.g. serializing the request body object
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public com.squareup.okhttp.Call confirmPlacementOptionAsync(String inboundPlanId, String placementOptionId, final ApiCallback<ConfirmPlacementOptionResponse> callback) throws ApiException, LWAException {
  
          ProgressResponseBody.ProgressListener progressListener = null;
          ProgressRequestBody.ProgressRequestListener progressRequestListener = null;
  
          if (callback != null) {
              progressListener = new ProgressResponseBody.ProgressListener() {
                  @Override
                  public void update(long bytesRead, long contentLength, boolean done) {
                      callback.onDownloadProgress(bytesRead, contentLength, done);
                  }
              };
  
              progressRequestListener = new ProgressRequestBody.ProgressRequestListener() {
                  @Override
                  public void onRequestProgress(long bytesWritten, long contentLength, boolean done) {
                      callback.onUploadProgress(bytesWritten, contentLength, done);
                  }
              };
          }
  
          com.squareup.okhttp.Call call = confirmPlacementOptionValidateBeforeCall(inboundPlanId, placementOptionId, progressListener, progressRequestListener);
          Type localVarReturnType = new TypeToken<ConfirmPlacementOptionResponse>() {
          }.getType();
          apiClient.executeAsync(call, localVarReturnType, callback);
          return call;
      }
  
      /**
       * Build call for confirmShipmentContentUpdatePreview
       *
       * @param inboundPlanId           Identifier of an inbound plan. (required)
       * @param shipmentId              Identifier of a shipment. A shipment contains the boxes and units being inbounded. (required)
       * @param contentUpdatePreviewId  Identifier of a content update preview. (required)
       * @param progressListener        Progress listener
       * @param progressRequestListener Progress request listener
       * @return Call to execute
       * @throws ApiException If fail to serialize the request body object
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public com.squareup.okhttp.Call confirmShipmentContentUpdatePreviewCall(String inboundPlanId, String shipmentId, String contentUpdatePreviewId, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException, LWAException {
          Object localVarPostBody = null;
  
          // create path and map variables
          String localVarPath = "/inbound/fba/2024-03-20/inboundPlans/{inboundPlanId}/shipments/{shipmentId}/contentUpdatePreviews/{contentUpdatePreviewId}/confirmation"
                  .replaceAll("\\{" + "inboundPlanId" + "\\}", apiClient.escapeString(inboundPlanId))
                  .replaceAll("\\{" + "shipmentId" + "\\}", apiClient.escapeString(shipmentId))
                  .replaceAll("\\{" + "contentUpdatePreviewId" + "\\}", apiClient.escapeString(contentUpdatePreviewId));
  
          List<Pair> localVarQueryParams = new ArrayList<Pair>();
          List<Pair> localVarCollectionQueryParams = new ArrayList<Pair>();
  
          Map<String, String> localVarHeaderParams = new HashMap<String, String>();
  
          Map<String, Object> localVarFormParams = new HashMap<String, Object>();
  
          final String[] localVarAccepts = {
                  "application/json"
          };
          final String localVarAccept = apiClient.selectHeaderAccept(localVarAccepts);
          if (localVarAccept != null) localVarHeaderParams.put("Accept", localVarAccept);
  
          final String[] localVarContentTypes = {
                  "application/json"
          };
          final String localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes);
          localVarHeaderParams.put("Content-Type", localVarContentType);
  
          if (progressListener != null) {
              apiClient.getHttpClient().networkInterceptors().add(new com.squareup.okhttp.Interceptor() {
                  @Override
                  public com.squareup.okhttp.Response intercept(com.squareup.okhttp.Interceptor.Chain chain) throws IOException {
                      com.squareup.okhttp.Response originalResponse = chain.proceed(chain.request());
                      return originalResponse.newBuilder()
                              .body(new ProgressResponseBody(originalResponse.body(), progressListener))
                              .build();
                  }
              });
          }
  
          String[] localVarAuthNames = new String[]{};
          return apiClient.buildCall(localVarPath, "POST", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarFormParams, localVarAuthNames, progressRequestListener);
      }
  
      @SuppressWarnings("rawtypes")
      private com.squareup.okhttp.Call confirmShipmentContentUpdatePreviewValidateBeforeCall(String inboundPlanId, String shipmentId, String contentUpdatePreviewId, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException, LWAException {
  
          // verify the required parameter 'inboundPlanId' is set
          if (inboundPlanId == null) {
              throw new ApiException("Missing the required parameter 'inboundPlanId' when calling confirmShipmentContentUpdatePreview(Async)");
          }
  
          // verify the required parameter 'shipmentId' is set
          if (shipmentId == null) {
              throw new ApiException("Missing the required parameter 'shipmentId' when calling confirmShipmentContentUpdatePreview(Async)");
          }
  
          // verify the required parameter 'contentUpdatePreviewId' is set
          if (contentUpdatePreviewId == null) {
              throw new ApiException("Missing the required parameter 'contentUpdatePreviewId' when calling confirmShipmentContentUpdatePreview(Async)");
          }
  
  
          com.squareup.okhttp.Call call = confirmShipmentContentUpdatePreviewCall(inboundPlanId, shipmentId, contentUpdatePreviewId, progressListener, progressRequestListener);
          return call;
  
      }
  
      /**
       * Confirm a shipment content update preview and accept the changes in transportation cost.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 30 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId          Identifier of an inbound plan. (required)
       * @param shipmentId             Identifier of a shipment. A shipment contains the boxes and units being inbounded. (required)
       * @param contentUpdatePreviewId Identifier of a content update preview. (required)
       * @return ConfirmShipmentContentUpdatePreviewResponse
       * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public ConfirmShipmentContentUpdatePreviewResponse confirmShipmentContentUpdatePreview(String inboundPlanId, String shipmentId, String contentUpdatePreviewId) throws ApiException, LWAException {
          ApiResponse<ConfirmShipmentContentUpdatePreviewResponse> resp = confirmShipmentContentUpdatePreviewWithHttpInfo(inboundPlanId, shipmentId, contentUpdatePreviewId);
          return resp.getData();
      }
  
      /**
       * Confirm a shipment content update preview and accept the changes in transportation cost.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 30 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId          Identifier of an inbound plan. (required)
       * @param shipmentId             Identifier of a shipment. A shipment contains the boxes and units being inbounded. (required)
       * @param contentUpdatePreviewId Identifier of a content update preview. (required)
       * @return ApiResponse&lt;ConfirmShipmentContentUpdatePreviewResponse&gt;
       * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public ApiResponse<ConfirmShipmentContentUpdatePreviewResponse> confirmShipmentContentUpdatePreviewWithHttpInfo(String inboundPlanId, String shipmentId, String contentUpdatePreviewId) throws ApiException, LWAException {
          com.squareup.okhttp.Call call = confirmShipmentContentUpdatePreviewValidateBeforeCall(inboundPlanId, shipmentId, contentUpdatePreviewId, null, null);
          Type localVarReturnType = new TypeToken<ConfirmShipmentContentUpdatePreviewResponse>() {
          }.getType();
          return apiClient.execute(call, localVarReturnType);
      }
  
      /**
       * (asynchronously)
       * Confirm a shipment content update preview and accept the changes in transportation cost.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 30 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId          Identifier of an inbound plan. (required)
       * @param shipmentId             Identifier of a shipment. A shipment contains the boxes and units being inbounded. (required)
       * @param contentUpdatePreviewId Identifier of a content update preview. (required)
       * @param callback               The callback to be executed when the API call finishes
       * @return The request call
       * @throws ApiException If fail to process the API call, e.g. serializing the request body object
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public com.squareup.okhttp.Call confirmShipmentContentUpdatePreviewAsync(String inboundPlanId, String shipmentId, String contentUpdatePreviewId, final ApiCallback<ConfirmShipmentContentUpdatePreviewResponse> callback) throws ApiException, LWAException {
  
          ProgressResponseBody.ProgressListener progressListener = null;
          ProgressRequestBody.ProgressRequestListener progressRequestListener = null;
  
          if (callback != null) {
              progressListener = new ProgressResponseBody.ProgressListener() {
                  @Override
                  public void update(long bytesRead, long contentLength, boolean done) {
                      callback.onDownloadProgress(bytesRead, contentLength, done);
                  }
              };
  
              progressRequestListener = new ProgressRequestBody.ProgressRequestListener() {
                  @Override
                  public void onRequestProgress(long bytesWritten, long contentLength, boolean done) {
                      callback.onUploadProgress(bytesWritten, contentLength, done);
                  }
              };
          }
  
          com.squareup.okhttp.Call call = confirmShipmentContentUpdatePreviewValidateBeforeCall(inboundPlanId, shipmentId, contentUpdatePreviewId, progressListener, progressRequestListener);
          Type localVarReturnType = new TypeToken<ConfirmShipmentContentUpdatePreviewResponse>() {
          }.getType();
          apiClient.executeAsync(call, localVarReturnType, callback);
          return call;
      }
  
      /**
       * Build call for confirmTransportationOptions
       *
       * @param inboundPlanId           Identifier of an inbound plan. (required)
       * @param body                    The body of the request to &#x60;confirmTransportationOptions&#x60;. (required)
       * @param progressListener        Progress listener
       * @param progressRequestListener Progress request listener
       * @return Call to execute
       * @throws ApiException If fail to serialize the request body object
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public com.squareup.okhttp.Call confirmTransportationOptionsCall(String inboundPlanId, ConfirmTransportationOptionsRequest body, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException, LWAException {
          Object localVarPostBody = body;
  
          // create path and map variables
          String localVarPath = "/inbound/fba/2024-03-20/inboundPlans/{inboundPlanId}/transportationOptions/confirmation"
                  .replaceAll("\\{" + "inboundPlanId" + "\\}", apiClient.escapeString(inboundPlanId));
  
          List<Pair> localVarQueryParams = new ArrayList<Pair>();
          List<Pair> localVarCollectionQueryParams = new ArrayList<Pair>();
  
          Map<String, String> localVarHeaderParams = new HashMap<String, String>();
  
          Map<String, Object> localVarFormParams = new HashMap<String, Object>();
  
          final String[] localVarAccepts = {
                  "application/json"
          };
          final String localVarAccept = apiClient.selectHeaderAccept(localVarAccepts);
          if (localVarAccept != null) localVarHeaderParams.put("Accept", localVarAccept);
  
          final String[] localVarContentTypes = {
                  "application/json"
          };
          final String localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes);
          localVarHeaderParams.put("Content-Type", localVarContentType);
  
          if (progressListener != null) {
              apiClient.getHttpClient().networkInterceptors().add(new com.squareup.okhttp.Interceptor() {
                  @Override
                  public com.squareup.okhttp.Response intercept(com.squareup.okhttp.Interceptor.Chain chain) throws IOException {
                      com.squareup.okhttp.Response originalResponse = chain.proceed(chain.request());
                      return originalResponse.newBuilder()
                              .body(new ProgressResponseBody(originalResponse.body(), progressListener))
                              .build();
                  }
              });
          }
  
          String[] localVarAuthNames = new String[]{};
          return apiClient.buildCall(localVarPath, "POST", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarFormParams, localVarAuthNames, progressRequestListener);
      }
  
      @SuppressWarnings("rawtypes")
      private com.squareup.okhttp.Call confirmTransportationOptionsValidateBeforeCall(String inboundPlanId, ConfirmTransportationOptionsRequest body, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException, LWAException {
  
          // verify the required parameter 'inboundPlanId' is set
          if (inboundPlanId == null) {
              throw new ApiException("Missing the required parameter 'inboundPlanId' when calling confirmTransportationOptions(Async)");
          }
  
          // verify the required parameter 'body' is set
          if (body == null) {
              throw new ApiException("Missing the required parameter 'body' when calling confirmTransportationOptions(Async)");
          }
  
  
          com.squareup.okhttp.Call call = confirmTransportationOptionsCall(inboundPlanId, body, progressListener, progressRequestListener);
          return call;
  
      }
  
      /**
       * Confirms all the transportation options for an inbound plan. A placement option must be confirmed prior to use of this API. Once confirmed, new transportation options can not be generated or confirmed for the Inbound Plan.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 2 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId Identifier of an inbound plan. (required)
       * @param body          The body of the request to &#x60;confirmTransportationOptions&#x60;. (required)
       * @return ConfirmTransportationOptionsResponse
       * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public ConfirmTransportationOptionsResponse confirmTransportationOptions(String inboundPlanId, ConfirmTransportationOptionsRequest body) throws ApiException, LWAException {
          ApiResponse<ConfirmTransportationOptionsResponse> resp = confirmTransportationOptionsWithHttpInfo(inboundPlanId, body);
          return resp.getData();
      }
  
      /**
       * Confirms all the transportation options for an inbound plan. A placement option must be confirmed prior to use of this API. Once confirmed, new transportation options can not be generated or confirmed for the Inbound Plan.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 2 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId Identifier of an inbound plan. (required)
       * @param body          The body of the request to &#x60;confirmTransportationOptions&#x60;. (required)
       * @return ApiResponse&lt;ConfirmTransportationOptionsResponse&gt;
       * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public ApiResponse<ConfirmTransportationOptionsResponse> confirmTransportationOptionsWithHttpInfo(String inboundPlanId, ConfirmTransportationOptionsRequest body) throws ApiException, LWAException {
          com.squareup.okhttp.Call call = confirmTransportationOptionsValidateBeforeCall(inboundPlanId, body, null, null);
          Type localVarReturnType = new TypeToken<ConfirmTransportationOptionsResponse>() {
          }.getType();
          return apiClient.execute(call, localVarReturnType);
      }
  
      /**
       * (asynchronously)
       * Confirms all the transportation options for an inbound plan. A placement option must be confirmed prior to use of this API. Once confirmed, new transportation options can not be generated or confirmed for the Inbound Plan.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 2 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId Identifier of an inbound plan. (required)
       * @param body          The body of the request to &#x60;confirmTransportationOptions&#x60;. (required)
       * @param callback      The callback to be executed when the API call finishes
       * @return The request call
       * @throws ApiException If fail to process the API call, e.g. serializing the request body object
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public com.squareup.okhttp.Call confirmTransportationOptionsAsync(String inboundPlanId, ConfirmTransportationOptionsRequest body, final ApiCallback<ConfirmTransportationOptionsResponse> callback) throws ApiException, LWAException {
  
          ProgressResponseBody.ProgressListener progressListener = null;
          ProgressRequestBody.ProgressRequestListener progressRequestListener = null;
  
          if (callback != null) {
              progressListener = new ProgressResponseBody.ProgressListener() {
                  @Override
                  public void update(long bytesRead, long contentLength, boolean done) {
                      callback.onDownloadProgress(bytesRead, contentLength, done);
                  }
              };
  
              progressRequestListener = new ProgressRequestBody.ProgressRequestListener() {
                  @Override
                  public void onRequestProgress(long bytesWritten, long contentLength, boolean done) {
                      callback.onUploadProgress(bytesWritten, contentLength, done);
                  }
              };
          }
  
          com.squareup.okhttp.Call call = confirmTransportationOptionsValidateBeforeCall(inboundPlanId, body, progressListener, progressRequestListener);
          Type localVarReturnType = new TypeToken<ConfirmTransportationOptionsResponse>() {
          }.getType();
          apiClient.executeAsync(call, localVarReturnType, callback);
          return call;
      }
  
      /**
       * Build call for createInboundPlan
       *
       * @param body                    The body of the request to &#x60;createInboundPlan&#x60;. (required)
       * @param progressListener        Progress listener
       * @param progressRequestListener Progress request listener
       * @return Call to execute
       * @throws ApiException If fail to serialize the request body object
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public com.squareup.okhttp.Call createInboundPlanCall(CreateInboundPlanRequest body, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException, LWAException {
          Object localVarPostBody = body;
  
          // create path and map variables
          String localVarPath = "/inbound/fba/2024-03-20/inboundPlans";
  
          List<Pair> localVarQueryParams = new ArrayList<Pair>();
          List<Pair> localVarCollectionQueryParams = new ArrayList<Pair>();
  
          Map<String, String> localVarHeaderParams = new HashMap<String, String>();
  
          Map<String, Object> localVarFormParams = new HashMap<String, Object>();
  
          final String[] localVarAccepts = {
                  "application/json"
          };
          final String localVarAccept = apiClient.selectHeaderAccept(localVarAccepts);
          if (localVarAccept != null) localVarHeaderParams.put("Accept", localVarAccept);
  
          final String[] localVarContentTypes = {
                  "application/json"
          };
          final String localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes);
          localVarHeaderParams.put("Content-Type", localVarContentType);
  
          if (progressListener != null) {
              apiClient.getHttpClient().networkInterceptors().add(new com.squareup.okhttp.Interceptor() {
                  @Override
                  public com.squareup.okhttp.Response intercept(com.squareup.okhttp.Interceptor.Chain chain) throws IOException {
                      com.squareup.okhttp.Response originalResponse = chain.proceed(chain.request());
                      return originalResponse.newBuilder()
                              .body(new ProgressResponseBody(originalResponse.body(), progressListener))
                              .build();
                  }
              });
          }
  
          String[] localVarAuthNames = new String[]{};
          return apiClient.buildCall(localVarPath, "POST", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarFormParams, localVarAuthNames, progressRequestListener);
      }
  
      @SuppressWarnings("rawtypes")
      private com.squareup.okhttp.Call createInboundPlanValidateBeforeCall(CreateInboundPlanRequest body, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException, LWAException {
  
          // verify the required parameter 'body' is set
          if (body == null) {
              throw new ApiException("Missing the required parameter 'body' when calling createInboundPlan(Async)");
          }
  
  
          com.squareup.okhttp.Call call = createInboundPlanCall(body, progressListener, progressRequestListener);
          return call;
  
      }
  
      /**
       * Creates an inbound plan. An inbound plan contains all the necessary information to send shipments into Amazon&#39;s fufillment network.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 2 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param body The body of the request to &#x60;createInboundPlan&#x60;. (required)
       * @return CreateInboundPlanResponse
       * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public CreateInboundPlanResponse createInboundPlan(CreateInboundPlanRequest body) throws ApiException, LWAException {
          ApiResponse<CreateInboundPlanResponse> resp = createInboundPlanWithHttpInfo(body);
          return resp.getData();
      }
  
      /**
       * Creates an inbound plan. An inbound plan contains all the necessary information to send shipments into Amazon&#39;s fufillment network.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 2 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param body The body of the request to &#x60;createInboundPlan&#x60;. (required)
       * @return ApiResponse&lt;CreateInboundPlanResponse&gt;
       * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public ApiResponse<CreateInboundPlanResponse> createInboundPlanWithHttpInfo(CreateInboundPlanRequest body) throws ApiException, LWAException {
          com.squareup.okhttp.Call call = createInboundPlanValidateBeforeCall(body, null, null);
          Type localVarReturnType = new TypeToken<CreateInboundPlanResponse>() {
          }.getType();
          return apiClient.execute(call, localVarReturnType);
      }
  
      /**
       * (asynchronously)
       * Creates an inbound plan. An inbound plan contains all the necessary information to send shipments into Amazon&#39;s fufillment network.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 2 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param body     The body of the request to &#x60;createInboundPlan&#x60;. (required)
       * @param callback The callback to be executed when the API call finishes
       * @return The request call
       * @throws ApiException If fail to process the API call, e.g. serializing the request body object
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public com.squareup.okhttp.Call createInboundPlanAsync(CreateInboundPlanRequest body, final ApiCallback<CreateInboundPlanResponse> callback) throws ApiException, LWAException {
  
          ProgressResponseBody.ProgressListener progressListener = null;
          ProgressRequestBody.ProgressRequestListener progressRequestListener = null;
  
          if (callback != null) {
              progressListener = new ProgressResponseBody.ProgressListener() {
                  @Override
                  public void update(long bytesRead, long contentLength, boolean done) {
                      callback.onDownloadProgress(bytesRead, contentLength, done);
                  }
              };
  
              progressRequestListener = new ProgressRequestBody.ProgressRequestListener() {
                  @Override
                  public void onRequestProgress(long bytesWritten, long contentLength, boolean done) {
                      callback.onUploadProgress(bytesWritten, contentLength, done);
                  }
              };
          }
  
          com.squareup.okhttp.Call call = createInboundPlanValidateBeforeCall(body, progressListener, progressRequestListener);
          Type localVarReturnType = new TypeToken<CreateInboundPlanResponse>() {
          }.getType();
          apiClient.executeAsync(call, localVarReturnType, callback);
          return call;
      }
  
      /**
       * Build call for createMarketplaceItemLabels
       *
       * @param body                    The body of the request to &#x60;createMarketplaceItemLabels&#x60;. (required)
       * @param progressListener        Progress listener
       * @param progressRequestListener Progress request listener
       * @return Call to execute
       * @throws ApiException If fail to serialize the request body object
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public com.squareup.okhttp.Call createMarketplaceItemLabelsCall(CreateMarketplaceItemLabelsRequest body, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException, LWAException {
          Object localVarPostBody = body;
  
          // create path and map variables
          String localVarPath = "/inbound/fba/2024-03-20/items/labels";
  
          List<Pair> localVarQueryParams = new ArrayList<Pair>();
          List<Pair> localVarCollectionQueryParams = new ArrayList<Pair>();
  
          Map<String, String> localVarHeaderParams = new HashMap<String, String>();
  
          Map<String, Object> localVarFormParams = new HashMap<String, Object>();
  
          final String[] localVarAccepts = {
                  "application/json"
          };
          final String localVarAccept = apiClient.selectHeaderAccept(localVarAccepts);
          if (localVarAccept != null) localVarHeaderParams.put("Accept", localVarAccept);
  
          final String[] localVarContentTypes = {
                  "application/json"
          };
          final String localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes);
          localVarHeaderParams.put("Content-Type", localVarContentType);
  
          if (progressListener != null) {
              apiClient.getHttpClient().networkInterceptors().add(new com.squareup.okhttp.Interceptor() {
                  @Override
                  public com.squareup.okhttp.Response intercept(com.squareup.okhttp.Interceptor.Chain chain) throws IOException {
                      com.squareup.okhttp.Response originalResponse = chain.proceed(chain.request());
                      return originalResponse.newBuilder()
                              .body(new ProgressResponseBody(originalResponse.body(), progressListener))
                              .build();
                  }
              });
          }
  
          String[] localVarAuthNames = new String[]{};
          return apiClient.buildCall(localVarPath, "POST", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarFormParams, localVarAuthNames, progressRequestListener);
      }
  
      @SuppressWarnings("rawtypes")
      private com.squareup.okhttp.Call createMarketplaceItemLabelsValidateBeforeCall(CreateMarketplaceItemLabelsRequest body, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException, LWAException {
  
          // verify the required parameter 'body' is set
          if (body == null) {
              throw new ApiException("Missing the required parameter 'body' when calling createMarketplaceItemLabels(Async)");
          }
  
  
          com.squareup.okhttp.Call call = createMarketplaceItemLabelsCall(body, progressListener, progressRequestListener);
          return call;
  
      }
  
      /**
       * For a given marketplace - creates labels for a list of mskus.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 30 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param body The body of the request to &#x60;createMarketplaceItemLabels&#x60;. (required)
       * @return CreateMarketplaceItemLabelsResponse
       * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public CreateMarketplaceItemLabelsResponse createMarketplaceItemLabels(CreateMarketplaceItemLabelsRequest body) throws ApiException, LWAException {
          ApiResponse<CreateMarketplaceItemLabelsResponse> resp = createMarketplaceItemLabelsWithHttpInfo(body);
          return resp.getData();
      }
  
      /**
       * For a given marketplace - creates labels for a list of mskus.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 30 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param body The body of the request to &#x60;createMarketplaceItemLabels&#x60;. (required)
       * @return ApiResponse&lt;CreateMarketplaceItemLabelsResponse&gt;
       * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public ApiResponse<CreateMarketplaceItemLabelsResponse> createMarketplaceItemLabelsWithHttpInfo(CreateMarketplaceItemLabelsRequest body) throws ApiException, LWAException {
          com.squareup.okhttp.Call call = createMarketplaceItemLabelsValidateBeforeCall(body, null, null);
          Type localVarReturnType = new TypeToken<CreateMarketplaceItemLabelsResponse>() {
          }.getType();
          return apiClient.execute(call, localVarReturnType);
      }
  
      /**
       * (asynchronously)
       * For a given marketplace - creates labels for a list of mskus.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 30 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param body     The body of the request to &#x60;createMarketplaceItemLabels&#x60;. (required)
       * @param callback The callback to be executed when the API call finishes
       * @return The request call
       * @throws ApiException If fail to process the API call, e.g. serializing the request body object
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public com.squareup.okhttp.Call createMarketplaceItemLabelsAsync(CreateMarketplaceItemLabelsRequest body, final ApiCallback<CreateMarketplaceItemLabelsResponse> callback) throws ApiException, LWAException {
  
          ProgressResponseBody.ProgressListener progressListener = null;
          ProgressRequestBody.ProgressRequestListener progressRequestListener = null;
  
          if (callback != null) {
              progressListener = new ProgressResponseBody.ProgressListener() {
                  @Override
                  public void update(long bytesRead, long contentLength, boolean done) {
                      callback.onDownloadProgress(bytesRead, contentLength, done);
                  }
              };
  
              progressRequestListener = new ProgressRequestBody.ProgressRequestListener() {
                  @Override
                  public void onRequestProgress(long bytesWritten, long contentLength, boolean done) {
                      callback.onUploadProgress(bytesWritten, contentLength, done);
                  }
              };
          }
  
          com.squareup.okhttp.Call call = createMarketplaceItemLabelsValidateBeforeCall(body, progressListener, progressRequestListener);
          Type localVarReturnType = new TypeToken<CreateMarketplaceItemLabelsResponse>() {
          }.getType();
          apiClient.executeAsync(call, localVarReturnType, callback);
          return call;
      }
  
      /**
       * Build call for generateDeliveryWindowOptions
       *
       * @param inboundPlanId           Identifier of an inbound plan. (required)
       * @param shipmentId              The shipment to generate delivery window options for. (required)
       * @param progressListener        Progress listener
       * @param progressRequestListener Progress request listener
       * @return Call to execute
       * @throws ApiException If fail to serialize the request body object
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public com.squareup.okhttp.Call generateDeliveryWindowOptionsCall(String inboundPlanId, String shipmentId, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException, LWAException {
          Object localVarPostBody = null;
  
          // create path and map variables
          String localVarPath = "/inbound/fba/2024-03-20/inboundPlans/{inboundPlanId}/shipments/{shipmentId}/deliveryWindowOptions"
                  .replaceAll("\\{" + "inboundPlanId" + "\\}", apiClient.escapeString(inboundPlanId))
                  .replaceAll("\\{" + "shipmentId" + "\\}", apiClient.escapeString(shipmentId));
  
          List<Pair> localVarQueryParams = new ArrayList<Pair>();
          List<Pair> localVarCollectionQueryParams = new ArrayList<Pair>();
  
          Map<String, String> localVarHeaderParams = new HashMap<String, String>();
  
          Map<String, Object> localVarFormParams = new HashMap<String, Object>();
  
          final String[] localVarAccepts = {
                  "application/json"
          };
          final String localVarAccept = apiClient.selectHeaderAccept(localVarAccepts);
          if (localVarAccept != null) localVarHeaderParams.put("Accept", localVarAccept);
  
          final String[] localVarContentTypes = {
                  "application/json"
          };
          final String localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes);
          localVarHeaderParams.put("Content-Type", localVarContentType);
  
          if (progressListener != null) {
              apiClient.getHttpClient().networkInterceptors().add(new com.squareup.okhttp.Interceptor() {
                  @Override
                  public com.squareup.okhttp.Response intercept(com.squareup.okhttp.Interceptor.Chain chain) throws IOException {
                      com.squareup.okhttp.Response originalResponse = chain.proceed(chain.request());
                      return originalResponse.newBuilder()
                              .body(new ProgressResponseBody(originalResponse.body(), progressListener))
                              .build();
                  }
              });
          }
  
          String[] localVarAuthNames = new String[]{};
          return apiClient.buildCall(localVarPath, "POST", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarFormParams, localVarAuthNames, progressRequestListener);
      }
  
      @SuppressWarnings("rawtypes")
      private com.squareup.okhttp.Call generateDeliveryWindowOptionsValidateBeforeCall(String inboundPlanId, String shipmentId, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException, LWAException {
  
          // verify the required parameter 'inboundPlanId' is set
          if (inboundPlanId == null) {
              throw new ApiException("Missing the required parameter 'inboundPlanId' when calling generateDeliveryWindowOptions(Async)");
          }
  
          // verify the required parameter 'shipmentId' is set
          if (shipmentId == null) {
              throw new ApiException("Missing the required parameter 'shipmentId' when calling generateDeliveryWindowOptions(Async)");
          }
  
  
          com.squareup.okhttp.Call call = generateDeliveryWindowOptionsCall(inboundPlanId, shipmentId, progressListener, progressRequestListener);
          return call;
  
      }
  
      /**
       * Generates available delivery window options for a given shipment.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 30 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId Identifier of an inbound plan. (required)
       * @param shipmentId    The shipment to generate delivery window options for. (required)
       * @return GenerateDeliveryWindowOptionsResponse
       * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public GenerateDeliveryWindowOptionsResponse generateDeliveryWindowOptions(String inboundPlanId, String shipmentId) throws ApiException, LWAException {
          ApiResponse<GenerateDeliveryWindowOptionsResponse> resp = generateDeliveryWindowOptionsWithHttpInfo(inboundPlanId, shipmentId);
          return resp.getData();
      }
  
      /**
       * Generates available delivery window options for a given shipment.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 30 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId Identifier of an inbound plan. (required)
       * @param shipmentId    The shipment to generate delivery window options for. (required)
       * @return ApiResponse&lt;GenerateDeliveryWindowOptionsResponse&gt;
       * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public ApiResponse<GenerateDeliveryWindowOptionsResponse> generateDeliveryWindowOptionsWithHttpInfo(String inboundPlanId, String shipmentId) throws ApiException, LWAException {
          com.squareup.okhttp.Call call = generateDeliveryWindowOptionsValidateBeforeCall(inboundPlanId, shipmentId, null, null);
          Type localVarReturnType = new TypeToken<GenerateDeliveryWindowOptionsResponse>() {
          }.getType();
          return apiClient.execute(call, localVarReturnType);
      }
  
      /**
       * (asynchronously)
       * Generates available delivery window options for a given shipment.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 30 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId Identifier of an inbound plan. (required)
       * @param shipmentId    The shipment to generate delivery window options for. (required)
       * @param callback      The callback to be executed when the API call finishes
       * @return The request call
       * @throws ApiException If fail to process the API call, e.g. serializing the request body object
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public com.squareup.okhttp.Call generateDeliveryWindowOptionsAsync(String inboundPlanId, String shipmentId, final ApiCallback<GenerateDeliveryWindowOptionsResponse> callback) throws ApiException, LWAException {
  
          ProgressResponseBody.ProgressListener progressListener = null;
          ProgressRequestBody.ProgressRequestListener progressRequestListener = null;
  
          if (callback != null) {
              progressListener = new ProgressResponseBody.ProgressListener() {
                  @Override
                  public void update(long bytesRead, long contentLength, boolean done) {
                      callback.onDownloadProgress(bytesRead, contentLength, done);
                  }
              };
  
              progressRequestListener = new ProgressRequestBody.ProgressRequestListener() {
                  @Override
                  public void onRequestProgress(long bytesWritten, long contentLength, boolean done) {
                      callback.onUploadProgress(bytesWritten, contentLength, done);
                  }
              };
          }
  
          com.squareup.okhttp.Call call = generateDeliveryWindowOptionsValidateBeforeCall(inboundPlanId, shipmentId, progressListener, progressRequestListener);
          Type localVarReturnType = new TypeToken<GenerateDeliveryWindowOptionsResponse>() {
          }.getType();
          apiClient.executeAsync(call, localVarReturnType, callback);
          return call;
      }
  
      /**
       * Build call for generatePackingOptions
       *
       * @param inboundPlanId           Identifier of an inbound plan. (required)
       * @param progressListener        Progress listener
       * @param progressRequestListener Progress request listener
       * @return Call to execute
       * @throws ApiException If fail to serialize the request body object
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public com.squareup.okhttp.Call generatePackingOptionsCall(String inboundPlanId, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException, LWAException {
          Object localVarPostBody = null;
  
          // create path and map variables
          String localVarPath = "/inbound/fba/2024-03-20/inboundPlans/{inboundPlanId}/packingOptions"
                  .replaceAll("\\{" + "inboundPlanId" + "\\}", apiClient.escapeString(inboundPlanId));
  
          List<Pair> localVarQueryParams = new ArrayList<Pair>();
          List<Pair> localVarCollectionQueryParams = new ArrayList<Pair>();
  
          Map<String, String> localVarHeaderParams = new HashMap<String, String>();
  
          Map<String, Object> localVarFormParams = new HashMap<String, Object>();
  
          final String[] localVarAccepts = {
                  "application/json"
          };
          final String localVarAccept = apiClient.selectHeaderAccept(localVarAccepts);
          if (localVarAccept != null) localVarHeaderParams.put("Accept", localVarAccept);
  
          final String[] localVarContentTypes = {
                  "application/json"
          };
          final String localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes);
          localVarHeaderParams.put("Content-Type", localVarContentType);
  
          if (progressListener != null) {
              apiClient.getHttpClient().networkInterceptors().add(new com.squareup.okhttp.Interceptor() {
                  @Override
                  public com.squareup.okhttp.Response intercept(com.squareup.okhttp.Interceptor.Chain chain) throws IOException {
                      com.squareup.okhttp.Response originalResponse = chain.proceed(chain.request());
                      return originalResponse.newBuilder()
                              .body(new ProgressResponseBody(originalResponse.body(), progressListener))
                              .build();
                  }
              });
          }
  
          String[] localVarAuthNames = new String[]{};
          return apiClient.buildCall(localVarPath, "POST", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarFormParams, localVarAuthNames, progressRequestListener);
      }
  
      @SuppressWarnings("rawtypes")
      private com.squareup.okhttp.Call generatePackingOptionsValidateBeforeCall(String inboundPlanId, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException, LWAException {
  
          // verify the required parameter 'inboundPlanId' is set
          if (inboundPlanId == null) {
              throw new ApiException("Missing the required parameter 'inboundPlanId' when calling generatePackingOptions(Async)");
          }
  
  
          com.squareup.okhttp.Call call = generatePackingOptionsCall(inboundPlanId, progressListener, progressRequestListener);
          return call;
  
      }
  
      /**
       * Generates available packing options for the inbound plan.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 2 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId Identifier of an inbound plan. (required)
       * @return GeneratePackingOptionsResponse
       * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public GeneratePackingOptionsResponse generatePackingOptions(String inboundPlanId) throws ApiException, LWAException {
          ApiResponse<GeneratePackingOptionsResponse> resp = generatePackingOptionsWithHttpInfo(inboundPlanId);
          return resp.getData();
      }
  
      /**
       * Generates available packing options for the inbound plan.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 2 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId Identifier of an inbound plan. (required)
       * @return ApiResponse&lt;GeneratePackingOptionsResponse&gt;
       * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public ApiResponse<GeneratePackingOptionsResponse> generatePackingOptionsWithHttpInfo(String inboundPlanId) throws ApiException, LWAException {
          com.squareup.okhttp.Call call = generatePackingOptionsValidateBeforeCall(inboundPlanId, null, null);
          Type localVarReturnType = new TypeToken<GeneratePackingOptionsResponse>() {
          }.getType();
          return apiClient.execute(call, localVarReturnType);
      }
  
      /**
       * (asynchronously)
       * Generates available packing options for the inbound plan.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 2 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId Identifier of an inbound plan. (required)
       * @param callback      The callback to be executed when the API call finishes
       * @return The request call
       * @throws ApiException If fail to process the API call, e.g. serializing the request body object
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public com.squareup.okhttp.Call generatePackingOptionsAsync(String inboundPlanId, final ApiCallback<GeneratePackingOptionsResponse> callback) throws ApiException, LWAException {
  
          ProgressResponseBody.ProgressListener progressListener = null;
          ProgressRequestBody.ProgressRequestListener progressRequestListener = null;
  
          if (callback != null) {
              progressListener = new ProgressResponseBody.ProgressListener() {
                  @Override
                  public void update(long bytesRead, long contentLength, boolean done) {
                      callback.onDownloadProgress(bytesRead, contentLength, done);
                  }
              };
  
              progressRequestListener = new ProgressRequestBody.ProgressRequestListener() {
                  @Override
                  public void onRequestProgress(long bytesWritten, long contentLength, boolean done) {
                      callback.onUploadProgress(bytesWritten, contentLength, done);
                  }
              };
          }
  
          com.squareup.okhttp.Call call = generatePackingOptionsValidateBeforeCall(inboundPlanId, progressListener, progressRequestListener);
          Type localVarReturnType = new TypeToken<GeneratePackingOptionsResponse>() {
          }.getType();
          apiClient.executeAsync(call, localVarReturnType, callback);
          return call;
      }
  
      /**
       * Build call for generatePlacementOptions
       *
       * @param inboundPlanId           Identifier of an inbound plan. (required)
       * @param body                    The body of the request to &#x60;generatePlacementOptions&#x60;. (required)
       * @param progressListener        Progress listener
       * @param progressRequestListener Progress request listener
       * @return Call to execute
       * @throws ApiException If fail to serialize the request body object
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public com.squareup.okhttp.Call generatePlacementOptionsCall(String inboundPlanId, GeneratePlacementOptionsRequest body, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException, LWAException {
          Object localVarPostBody = body;
  
          // create path and map variables
          String localVarPath = "/inbound/fba/2024-03-20/inboundPlans/{inboundPlanId}/placementOptions"
                  .replaceAll("\\{" + "inboundPlanId" + "\\}", apiClient.escapeString(inboundPlanId));
  
          List<Pair> localVarQueryParams = new ArrayList<Pair>();
          List<Pair> localVarCollectionQueryParams = new ArrayList<Pair>();
  
          Map<String, String> localVarHeaderParams = new HashMap<String, String>();
  
          Map<String, Object> localVarFormParams = new HashMap<String, Object>();
  
          final String[] localVarAccepts = {
                  "application/json"
          };
          final String localVarAccept = apiClient.selectHeaderAccept(localVarAccepts);
          if (localVarAccept != null) localVarHeaderParams.put("Accept", localVarAccept);
  
          final String[] localVarContentTypes = {
                  "application/json"
          };
          final String localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes);
          localVarHeaderParams.put("Content-Type", localVarContentType);
  
          if (progressListener != null) {
              apiClient.getHttpClient().networkInterceptors().add(new com.squareup.okhttp.Interceptor() {
                  @Override
                  public com.squareup.okhttp.Response intercept(com.squareup.okhttp.Interceptor.Chain chain) throws IOException {
                      com.squareup.okhttp.Response originalResponse = chain.proceed(chain.request());
                      return originalResponse.newBuilder()
                              .body(new ProgressResponseBody(originalResponse.body(), progressListener))
                              .build();
                  }
              });
          }
  
          String[] localVarAuthNames = new String[]{};
          return apiClient.buildCall(localVarPath, "POST", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarFormParams, localVarAuthNames, progressRequestListener);
      }
  
      @SuppressWarnings("rawtypes")
      private com.squareup.okhttp.Call generatePlacementOptionsValidateBeforeCall(String inboundPlanId, GeneratePlacementOptionsRequest body, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException, LWAException {
  
          // verify the required parameter 'inboundPlanId' is set
          if (inboundPlanId == null) {
              throw new ApiException("Missing the required parameter 'inboundPlanId' when calling generatePlacementOptions(Async)");
          }
  
          // verify the required parameter 'body' is set
          if (body == null) {
              throw new ApiException("Missing the required parameter 'body' when calling generatePlacementOptions(Async)");
          }
  
  
          com.squareup.okhttp.Call call = generatePlacementOptionsCall(inboundPlanId, body, progressListener, progressRequestListener);
          return call;
  
      }
  
      /**
       * Generates placement options for the inbound plan.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 2 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId Identifier of an inbound plan. (required)
       * @param body          The body of the request to &#x60;generatePlacementOptions&#x60;. (required)
       * @return GeneratePlacementOptionsResponse
       * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public GeneratePlacementOptionsResponse generatePlacementOptions(String inboundPlanId, GeneratePlacementOptionsRequest body) throws ApiException, LWAException {
          ApiResponse<GeneratePlacementOptionsResponse> resp = generatePlacementOptionsWithHttpInfo(inboundPlanId, body);
          return resp.getData();
      }
  
      /**
       * Generates placement options for the inbound plan.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 2 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId Identifier of an inbound plan. (required)
       * @param body          The body of the request to &#x60;generatePlacementOptions&#x60;. (required)
       * @return ApiResponse&lt;GeneratePlacementOptionsResponse&gt;
       * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public ApiResponse<GeneratePlacementOptionsResponse> generatePlacementOptionsWithHttpInfo(String inboundPlanId, GeneratePlacementOptionsRequest body) throws ApiException, LWAException {
          com.squareup.okhttp.Call call = generatePlacementOptionsValidateBeforeCall(inboundPlanId, body, null, null);
          Type localVarReturnType = new TypeToken<GeneratePlacementOptionsResponse>() {
          }.getType();
          return apiClient.execute(call, localVarReturnType);
      }
  
      /**
       * (asynchronously)
       * Generates placement options for the inbound plan.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 2 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId Identifier of an inbound plan. (required)
       * @param body          The body of the request to &#x60;generatePlacementOptions&#x60;. (required)
       * @param callback      The callback to be executed when the API call finishes
       * @return The request call
       * @throws ApiException If fail to process the API call, e.g. serializing the request body object
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public com.squareup.okhttp.Call generatePlacementOptionsAsync(String inboundPlanId, GeneratePlacementOptionsRequest body, final ApiCallback<GeneratePlacementOptionsResponse> callback) throws ApiException, LWAException {
  
          ProgressResponseBody.ProgressListener progressListener = null;
          ProgressRequestBody.ProgressRequestListener progressRequestListener = null;
  
          if (callback != null) {
              progressListener = new ProgressResponseBody.ProgressListener() {
                  @Override
                  public void update(long bytesRead, long contentLength, boolean done) {
                      callback.onDownloadProgress(bytesRead, contentLength, done);
                  }
              };
  
              progressRequestListener = new ProgressRequestBody.ProgressRequestListener() {
                  @Override
                  public void onRequestProgress(long bytesWritten, long contentLength, boolean done) {
                      callback.onUploadProgress(bytesWritten, contentLength, done);
                  }
              };
          }
  
          com.squareup.okhttp.Call call = generatePlacementOptionsValidateBeforeCall(inboundPlanId, body, progressListener, progressRequestListener);
          Type localVarReturnType = new TypeToken<GeneratePlacementOptionsResponse>() {
          }.getType();
          apiClient.executeAsync(call, localVarReturnType, callback);
          return call;
      }
  
      /**
       * Build call for generateSelfShipAppointmentSlots
       *
       * @param inboundPlanId           Identifier of an inbound plan. (required)
       * @param shipmentId              Identifier of a shipment. A shipment contains the boxes and units being inbounded. (required)
       * @param body                    The body of the request to &#x60;generateSelfShipAppointmentSlots&#x60;. (required)
       * @param progressListener        Progress listener
       * @param progressRequestListener Progress request listener
       * @return Call to execute
       * @throws ApiException If fail to serialize the request body object
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public com.squareup.okhttp.Call generateSelfShipAppointmentSlotsCall(String inboundPlanId, String shipmentId, GenerateSelfShipAppointmentSlotsRequest body, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException, LWAException {
          Object localVarPostBody = body;
  
          // create path and map variables
          String localVarPath = "/inbound/fba/2024-03-20/inboundPlans/{inboundPlanId}/shipments/{shipmentId}/selfShipAppointmentSlots"
                  .replaceAll("\\{" + "inboundPlanId" + "\\}", apiClient.escapeString(inboundPlanId))
                  .replaceAll("\\{" + "shipmentId" + "\\}", apiClient.escapeString(shipmentId));
  
          List<Pair> localVarQueryParams = new ArrayList<Pair>();
          List<Pair> localVarCollectionQueryParams = new ArrayList<Pair>();
  
          Map<String, String> localVarHeaderParams = new HashMap<String, String>();
  
          Map<String, Object> localVarFormParams = new HashMap<String, Object>();
  
          final String[] localVarAccepts = {
                  "application/json"
          };
          final String localVarAccept = apiClient.selectHeaderAccept(localVarAccepts);
          if (localVarAccept != null) localVarHeaderParams.put("Accept", localVarAccept);
  
          final String[] localVarContentTypes = {
                  "application/json"
          };
          final String localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes);
          localVarHeaderParams.put("Content-Type", localVarContentType);
  
          if (progressListener != null) {
              apiClient.getHttpClient().networkInterceptors().add(new com.squareup.okhttp.Interceptor() {
                  @Override
                  public com.squareup.okhttp.Response intercept(com.squareup.okhttp.Interceptor.Chain chain) throws IOException {
                      com.squareup.okhttp.Response originalResponse = chain.proceed(chain.request());
                      return originalResponse.newBuilder()
                              .body(new ProgressResponseBody(originalResponse.body(), progressListener))
                              .build();
                  }
              });
          }
  
          String[] localVarAuthNames = new String[]{};
          return apiClient.buildCall(localVarPath, "POST", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarFormParams, localVarAuthNames, progressRequestListener);
      }
  
      @SuppressWarnings("rawtypes")
      private com.squareup.okhttp.Call generateSelfShipAppointmentSlotsValidateBeforeCall(String inboundPlanId, String shipmentId, GenerateSelfShipAppointmentSlotsRequest body, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException, LWAException {
  
          // verify the required parameter 'inboundPlanId' is set
          if (inboundPlanId == null) {
              throw new ApiException("Missing the required parameter 'inboundPlanId' when calling generateSelfShipAppointmentSlots(Async)");
          }
  
          // verify the required parameter 'shipmentId' is set
          if (shipmentId == null) {
              throw new ApiException("Missing the required parameter 'shipmentId' when calling generateSelfShipAppointmentSlots(Async)");
          }
  
          // verify the required parameter 'body' is set
          if (body == null) {
              throw new ApiException("Missing the required parameter 'body' when calling generateSelfShipAppointmentSlots(Async)");
          }
  
  
          com.squareup.okhttp.Call call = generateSelfShipAppointmentSlotsCall(inboundPlanId, shipmentId, body, progressListener, progressRequestListener);
          return call;
  
      }
  
      /**
       * Initiates the process of generating the appointment slots list.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 2 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId Identifier of an inbound plan. (required)
       * @param shipmentId    Identifier of a shipment. A shipment contains the boxes and units being inbounded. (required)
       * @param body          The body of the request to &#x60;generateSelfShipAppointmentSlots&#x60;. (required)
       * @return GenerateSelfShipAppointmentSlotsResponse
       * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public GenerateSelfShipAppointmentSlotsResponse generateSelfShipAppointmentSlots(String inboundPlanId, String shipmentId, GenerateSelfShipAppointmentSlotsRequest body) throws ApiException, LWAException {
          ApiResponse<GenerateSelfShipAppointmentSlotsResponse> resp = generateSelfShipAppointmentSlotsWithHttpInfo(inboundPlanId, shipmentId, body);
          return resp.getData();
      }
  
      /**
       * Initiates the process of generating the appointment slots list.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 2 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId Identifier of an inbound plan. (required)
       * @param shipmentId    Identifier of a shipment. A shipment contains the boxes and units being inbounded. (required)
       * @param body          The body of the request to &#x60;generateSelfShipAppointmentSlots&#x60;. (required)
       * @return ApiResponse&lt;GenerateSelfShipAppointmentSlotsResponse&gt;
       * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public ApiResponse<GenerateSelfShipAppointmentSlotsResponse> generateSelfShipAppointmentSlotsWithHttpInfo(String inboundPlanId, String shipmentId, GenerateSelfShipAppointmentSlotsRequest body) throws ApiException, LWAException {
          com.squareup.okhttp.Call call = generateSelfShipAppointmentSlotsValidateBeforeCall(inboundPlanId, shipmentId, body, null, null);
          Type localVarReturnType = new TypeToken<GenerateSelfShipAppointmentSlotsResponse>() {
          }.getType();
          return apiClient.execute(call, localVarReturnType);
      }
  
      /**
       * (asynchronously)
       * Initiates the process of generating the appointment slots list.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 2 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId Identifier of an inbound plan. (required)
       * @param shipmentId    Identifier of a shipment. A shipment contains the boxes and units being inbounded. (required)
       * @param body          The body of the request to &#x60;generateSelfShipAppointmentSlots&#x60;. (required)
       * @param callback      The callback to be executed when the API call finishes
       * @return The request call
       * @throws ApiException If fail to process the API call, e.g. serializing the request body object
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public com.squareup.okhttp.Call generateSelfShipAppointmentSlotsAsync(String inboundPlanId, String shipmentId, GenerateSelfShipAppointmentSlotsRequest body, final ApiCallback<GenerateSelfShipAppointmentSlotsResponse> callback) throws ApiException, LWAException {
  
          ProgressResponseBody.ProgressListener progressListener = null;
          ProgressRequestBody.ProgressRequestListener progressRequestListener = null;
  
          if (callback != null) {
              progressListener = new ProgressResponseBody.ProgressListener() {
                  @Override
                  public void update(long bytesRead, long contentLength, boolean done) {
                      callback.onDownloadProgress(bytesRead, contentLength, done);
                  }
              };
  
              progressRequestListener = new ProgressRequestBody.ProgressRequestListener() {
                  @Override
                  public void onRequestProgress(long bytesWritten, long contentLength, boolean done) {
                      callback.onUploadProgress(bytesWritten, contentLength, done);
                  }
              };
          }
  
          com.squareup.okhttp.Call call = generateSelfShipAppointmentSlotsValidateBeforeCall(inboundPlanId, shipmentId, body, progressListener, progressRequestListener);
          Type localVarReturnType = new TypeToken<GenerateSelfShipAppointmentSlotsResponse>() {
          }.getType();
          apiClient.executeAsync(call, localVarReturnType, callback);
          return call;
      }
  
      /**
       * Build call for generateShipmentContentUpdatePreviews
       *
       * @param inboundPlanId           Identifier of an inbound plan. (required)
       * @param shipmentId              Identifier of a shipment. A shipment contains the boxes and units being inbounded. (required)
       * @param body                    The body of the request to &#x60;generateShipmentContentUpdatePreviews&#x60;. (required)
       * @param progressListener        Progress listener
       * @param progressRequestListener Progress request listener
       * @return Call to execute
       * @throws ApiException If fail to serialize the request body object
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public com.squareup.okhttp.Call generateShipmentContentUpdatePreviewsCall(String inboundPlanId, String shipmentId, GenerateShipmentContentUpdatePreviewsRequest body, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException, LWAException {
          Object localVarPostBody = body;
  
          // create path and map variables
          String localVarPath = "/inbound/fba/2024-03-20/inboundPlans/{inboundPlanId}/shipments/{shipmentId}/contentUpdatePreviews"
                  .replaceAll("\\{" + "inboundPlanId" + "\\}", apiClient.escapeString(inboundPlanId))
                  .replaceAll("\\{" + "shipmentId" + "\\}", apiClient.escapeString(shipmentId));
  
          List<Pair> localVarQueryParams = new ArrayList<Pair>();
          List<Pair> localVarCollectionQueryParams = new ArrayList<Pair>();
  
          Map<String, String> localVarHeaderParams = new HashMap<String, String>();
  
          Map<String, Object> localVarFormParams = new HashMap<String, Object>();
  
          final String[] localVarAccepts = {
                  "application/json"
          };
          final String localVarAccept = apiClient.selectHeaderAccept(localVarAccepts);
          if (localVarAccept != null) localVarHeaderParams.put("Accept", localVarAccept);
  
          final String[] localVarContentTypes = {
                  "application/json"
          };
          final String localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes);
          localVarHeaderParams.put("Content-Type", localVarContentType);
  
          if (progressListener != null) {
              apiClient.getHttpClient().networkInterceptors().add(new com.squareup.okhttp.Interceptor() {
                  @Override
                  public com.squareup.okhttp.Response intercept(com.squareup.okhttp.Interceptor.Chain chain) throws IOException {
                      com.squareup.okhttp.Response originalResponse = chain.proceed(chain.request());
                      return originalResponse.newBuilder()
                              .body(new ProgressResponseBody(originalResponse.body(), progressListener))
                              .build();
                  }
              });
          }
  
          String[] localVarAuthNames = new String[]{};
          return apiClient.buildCall(localVarPath, "POST", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarFormParams, localVarAuthNames, progressRequestListener);
      }
  
      @SuppressWarnings("rawtypes")
      private com.squareup.okhttp.Call generateShipmentContentUpdatePreviewsValidateBeforeCall(String inboundPlanId, String shipmentId, GenerateShipmentContentUpdatePreviewsRequest body, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException, LWAException {
  
          // verify the required parameter 'inboundPlanId' is set
          if (inboundPlanId == null) {
              throw new ApiException("Missing the required parameter 'inboundPlanId' when calling generateShipmentContentUpdatePreviews(Async)");
          }
  
          // verify the required parameter 'shipmentId' is set
          if (shipmentId == null) {
              throw new ApiException("Missing the required parameter 'shipmentId' when calling generateShipmentContentUpdatePreviews(Async)");
          }
  
          // verify the required parameter 'body' is set
          if (body == null) {
              throw new ApiException("Missing the required parameter 'body' when calling generateShipmentContentUpdatePreviews(Async)");
          }
  
  
          com.squareup.okhttp.Call call = generateShipmentContentUpdatePreviewsCall(inboundPlanId, shipmentId, body, progressListener, progressRequestListener);
          return call;
  
      }
  
      /**
       * Generate a shipment content update preview given a set of intended boxes and/or items for a shipment with a confirmed carrier. The shipment content update preview will be viewable with the updated costs and contents prior to confirmation.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 30 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId Identifier of an inbound plan. (required)
       * @param shipmentId    Identifier of a shipment. A shipment contains the boxes and units being inbounded. (required)
       * @param body          The body of the request to &#x60;generateShipmentContentUpdatePreviews&#x60;. (required)
       * @return GenerateShipmentContentUpdatePreviewsResponse
       * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public GenerateShipmentContentUpdatePreviewsResponse generateShipmentContentUpdatePreviews(String inboundPlanId, String shipmentId, GenerateShipmentContentUpdatePreviewsRequest body) throws ApiException, LWAException {
          ApiResponse<GenerateShipmentContentUpdatePreviewsResponse> resp = generateShipmentContentUpdatePreviewsWithHttpInfo(inboundPlanId, shipmentId, body);
          return resp.getData();
      }
  
      /**
       * Generate a shipment content update preview given a set of intended boxes and/or items for a shipment with a confirmed carrier. The shipment content update preview will be viewable with the updated costs and contents prior to confirmation.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 30 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId Identifier of an inbound plan. (required)
       * @param shipmentId    Identifier of a shipment. A shipment contains the boxes and units being inbounded. (required)
       * @param body          The body of the request to &#x60;generateShipmentContentUpdatePreviews&#x60;. (required)
       * @return ApiResponse&lt;GenerateShipmentContentUpdatePreviewsResponse&gt;
       * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public ApiResponse<GenerateShipmentContentUpdatePreviewsResponse> generateShipmentContentUpdatePreviewsWithHttpInfo(String inboundPlanId, String shipmentId, GenerateShipmentContentUpdatePreviewsRequest body) throws ApiException, LWAException {
          com.squareup.okhttp.Call call = generateShipmentContentUpdatePreviewsValidateBeforeCall(inboundPlanId, shipmentId, body, null, null);
          Type localVarReturnType = new TypeToken<GenerateShipmentContentUpdatePreviewsResponse>() {
          }.getType();
          return apiClient.execute(call, localVarReturnType);
      }
  
      /**
       * (asynchronously)
       * Generate a shipment content update preview given a set of intended boxes and/or items for a shipment with a confirmed carrier. The shipment content update preview will be viewable with the updated costs and contents prior to confirmation.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 30 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId Identifier of an inbound plan. (required)
       * @param shipmentId    Identifier of a shipment. A shipment contains the boxes and units being inbounded. (required)
       * @param body          The body of the request to &#x60;generateShipmentContentUpdatePreviews&#x60;. (required)
       * @param callback      The callback to be executed when the API call finishes
       * @return The request call
       * @throws ApiException If fail to process the API call, e.g. serializing the request body object
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public com.squareup.okhttp.Call generateShipmentContentUpdatePreviewsAsync(String inboundPlanId, String shipmentId, GenerateShipmentContentUpdatePreviewsRequest body, final ApiCallback<GenerateShipmentContentUpdatePreviewsResponse> callback) throws ApiException, LWAException {
  
          ProgressResponseBody.ProgressListener progressListener = null;
          ProgressRequestBody.ProgressRequestListener progressRequestListener = null;
  
          if (callback != null) {
              progressListener = new ProgressResponseBody.ProgressListener() {
                  @Override
                  public void update(long bytesRead, long contentLength, boolean done) {
                      callback.onDownloadProgress(bytesRead, contentLength, done);
                  }
              };
  
              progressRequestListener = new ProgressRequestBody.ProgressRequestListener() {
                  @Override
                  public void onRequestProgress(long bytesWritten, long contentLength, boolean done) {
                      callback.onUploadProgress(bytesWritten, contentLength, done);
                  }
              };
          }
  
          com.squareup.okhttp.Call call = generateShipmentContentUpdatePreviewsValidateBeforeCall(inboundPlanId, shipmentId, body, progressListener, progressRequestListener);
          Type localVarReturnType = new TypeToken<GenerateShipmentContentUpdatePreviewsResponse>() {
          }.getType();
          apiClient.executeAsync(call, localVarReturnType, callback);
          return call;
      }
  
      /**
       * Build call for generateTransportationOptions
       *
       * @param inboundPlanId           Identifier of an inbound plan. (required)
       * @param body                    The body of the request to &#x60;generateTransportationOptions&#x60;. (required)
       * @param progressListener        Progress listener
       * @param progressRequestListener Progress request listener
       * @return Call to execute
       * @throws ApiException If fail to serialize the request body object
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public com.squareup.okhttp.Call generateTransportationOptionsCall(String inboundPlanId, GenerateTransportationOptionsRequest body, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException, LWAException {
          Object localVarPostBody = body;
  
          // create path and map variables
          String localVarPath = "/inbound/fba/2024-03-20/inboundPlans/{inboundPlanId}/transportationOptions"
                  .replaceAll("\\{" + "inboundPlanId" + "\\}", apiClient.escapeString(inboundPlanId));
  
          List<Pair> localVarQueryParams = new ArrayList<Pair>();
          List<Pair> localVarCollectionQueryParams = new ArrayList<Pair>();
  
          Map<String, String> localVarHeaderParams = new HashMap<String, String>();
  
          Map<String, Object> localVarFormParams = new HashMap<String, Object>();
  
          final String[] localVarAccepts = {
                  "application/json"
          };
          final String localVarAccept = apiClient.selectHeaderAccept(localVarAccepts);
          if (localVarAccept != null) localVarHeaderParams.put("Accept", localVarAccept);
  
          final String[] localVarContentTypes = {
                  "application/json"
          };
          final String localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes);
          localVarHeaderParams.put("Content-Type", localVarContentType);
  
          if (progressListener != null) {
              apiClient.getHttpClient().networkInterceptors().add(new com.squareup.okhttp.Interceptor() {
                  @Override
                  public com.squareup.okhttp.Response intercept(com.squareup.okhttp.Interceptor.Chain chain) throws IOException {
                      com.squareup.okhttp.Response originalResponse = chain.proceed(chain.request());
                      return originalResponse.newBuilder()
                              .body(new ProgressResponseBody(originalResponse.body(), progressListener))
                              .build();
                  }
              });
          }
  
          String[] localVarAuthNames = new String[]{};
          return apiClient.buildCall(localVarPath, "POST", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarFormParams, localVarAuthNames, progressRequestListener);
      }
  
      @SuppressWarnings("rawtypes")
      private com.squareup.okhttp.Call generateTransportationOptionsValidateBeforeCall(String inboundPlanId, GenerateTransportationOptionsRequest body, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException, LWAException {
  
          // verify the required parameter 'inboundPlanId' is set
          if (inboundPlanId == null) {
              throw new ApiException("Missing the required parameter 'inboundPlanId' when calling generateTransportationOptions(Async)");
          }
  
          // verify the required parameter 'body' is set
          if (body == null) {
              throw new ApiException("Missing the required parameter 'body' when calling generateTransportationOptions(Async)");
          }
  
  
          com.squareup.okhttp.Call call = generateTransportationOptionsCall(inboundPlanId, body, progressListener, progressRequestListener);
          return call;
  
      }
  
      /**
       * Generates available transportation options for a given placement option.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 2 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId Identifier of an inbound plan. (required)
       * @param body          The body of the request to &#x60;generateTransportationOptions&#x60;. (required)
       * @return GenerateTransportationOptionsResponse
       * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public GenerateTransportationOptionsResponse generateTransportationOptions(String inboundPlanId, GenerateTransportationOptionsRequest body) throws ApiException, LWAException {
          ApiResponse<GenerateTransportationOptionsResponse> resp = generateTransportationOptionsWithHttpInfo(inboundPlanId, body);
          return resp.getData();
      }
  
      /**
       * Generates available transportation options for a given placement option.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 2 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId Identifier of an inbound plan. (required)
       * @param body          The body of the request to &#x60;generateTransportationOptions&#x60;. (required)
       * @return ApiResponse&lt;GenerateTransportationOptionsResponse&gt;
       * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public ApiResponse<GenerateTransportationOptionsResponse> generateTransportationOptionsWithHttpInfo(String inboundPlanId, GenerateTransportationOptionsRequest body) throws ApiException, LWAException {
          com.squareup.okhttp.Call call = generateTransportationOptionsValidateBeforeCall(inboundPlanId, body, null, null);
          Type localVarReturnType = new TypeToken<GenerateTransportationOptionsResponse>() {
          }.getType();
          return apiClient.execute(call, localVarReturnType);
      }
  
      /**
       * (asynchronously)
       * Generates available transportation options for a given placement option.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 2 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId Identifier of an inbound plan. (required)
       * @param body          The body of the request to &#x60;generateTransportationOptions&#x60;. (required)
       * @param callback      The callback to be executed when the API call finishes
       * @return The request call
       * @throws ApiException If fail to process the API call, e.g. serializing the request body object
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public com.squareup.okhttp.Call generateTransportationOptionsAsync(String inboundPlanId, GenerateTransportationOptionsRequest body, final ApiCallback<GenerateTransportationOptionsResponse> callback) throws ApiException, LWAException {
  
          ProgressResponseBody.ProgressListener progressListener = null;
          ProgressRequestBody.ProgressRequestListener progressRequestListener = null;
  
          if (callback != null) {
              progressListener = new ProgressResponseBody.ProgressListener() {
                  @Override
                  public void update(long bytesRead, long contentLength, boolean done) {
                      callback.onDownloadProgress(bytesRead, contentLength, done);
                  }
              };
  
              progressRequestListener = new ProgressRequestBody.ProgressRequestListener() {
                  @Override
                  public void onRequestProgress(long bytesWritten, long contentLength, boolean done) {
                      callback.onUploadProgress(bytesWritten, contentLength, done);
                  }
              };
          }
  
          com.squareup.okhttp.Call call = generateTransportationOptionsValidateBeforeCall(inboundPlanId, body, progressListener, progressRequestListener);
          Type localVarReturnType = new TypeToken<GenerateTransportationOptionsResponse>() {
          }.getType();
          apiClient.executeAsync(call, localVarReturnType, callback);
          return call;
      }
  
      /**
       * Build call for getDeliveryChallanDocument
       *
       * @param inboundPlanId           Identifier of an inbound plan. (required)
       * @param shipmentId              Identifier of a shipment. A shipment contains the boxes and units being inbounded. (required)
       * @param progressListener        Progress listener
       * @param progressRequestListener Progress request listener
       * @return Call to execute
       * @throws ApiException If fail to serialize the request body object
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public com.squareup.okhttp.Call getDeliveryChallanDocumentCall(String inboundPlanId, String shipmentId, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException, LWAException {
          Object localVarPostBody = null;
  
          // create path and map variables
          String localVarPath = "/inbound/fba/2024-03-20/inboundPlans/{inboundPlanId}/shipments/{shipmentId}/deliveryChallanDocument"
                  .replaceAll("\\{" + "inboundPlanId" + "\\}", apiClient.escapeString(inboundPlanId))
                  .replaceAll("\\{" + "shipmentId" + "\\}", apiClient.escapeString(shipmentId));
  
          List<Pair> localVarQueryParams = new ArrayList<Pair>();
          List<Pair> localVarCollectionQueryParams = new ArrayList<Pair>();
  
          Map<String, String> localVarHeaderParams = new HashMap<String, String>();
  
          Map<String, Object> localVarFormParams = new HashMap<String, Object>();
  
          final String[] localVarAccepts = {
                  "application/json"
          };
          final String localVarAccept = apiClient.selectHeaderAccept(localVarAccepts);
          if (localVarAccept != null) localVarHeaderParams.put("Accept", localVarAccept);
  
          final String[] localVarContentTypes = {
                  "application/json"
          };
          final String localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes);
          localVarHeaderParams.put("Content-Type", localVarContentType);
  
          if (progressListener != null) {
              apiClient.getHttpClient().networkInterceptors().add(new com.squareup.okhttp.Interceptor() {
                  @Override
                  public com.squareup.okhttp.Response intercept(com.squareup.okhttp.Interceptor.Chain chain) throws IOException {
                      com.squareup.okhttp.Response originalResponse = chain.proceed(chain.request());
                      return originalResponse.newBuilder()
                              .body(new ProgressResponseBody(originalResponse.body(), progressListener))
                              .build();
                  }
              });
          }
  
          String[] localVarAuthNames = new String[]{};
          return apiClient.buildCall(localVarPath, "GET", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarFormParams, localVarAuthNames, progressRequestListener);
      }
  
      @SuppressWarnings("rawtypes")
      private com.squareup.okhttp.Call getDeliveryChallanDocumentValidateBeforeCall(String inboundPlanId, String shipmentId, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException, LWAException {
  
          // verify the required parameter 'inboundPlanId' is set
          if (inboundPlanId == null) {
              throw new ApiException("Missing the required parameter 'inboundPlanId' when calling getDeliveryChallanDocument(Async)");
          }
  
          // verify the required parameter 'shipmentId' is set
          if (shipmentId == null) {
              throw new ApiException("Missing the required parameter 'shipmentId' when calling getDeliveryChallanDocument(Async)");
          }
  
  
          com.squareup.okhttp.Call call = getDeliveryChallanDocumentCall(inboundPlanId, shipmentId, progressListener, progressRequestListener);
          return call;
  
      }
  
      /**
       * Provide delivery challan document for PCP transportation in IN marketplace.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 6 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId Identifier of an inbound plan. (required)
       * @param shipmentId    Identifier of a shipment. A shipment contains the boxes and units being inbounded. (required)
       * @return GetDeliveryChallanDocumentResponse
       * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public GetDeliveryChallanDocumentResponse getDeliveryChallanDocument(String inboundPlanId, String shipmentId) throws ApiException, LWAException {
          ApiResponse<GetDeliveryChallanDocumentResponse> resp = getDeliveryChallanDocumentWithHttpInfo(inboundPlanId, shipmentId);
          return resp.getData();
      }
  
      /**
       * Provide delivery challan document for PCP transportation in IN marketplace.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 6 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId Identifier of an inbound plan. (required)
       * @param shipmentId    Identifier of a shipment. A shipment contains the boxes and units being inbounded. (required)
       * @return ApiResponse&lt;GetDeliveryChallanDocumentResponse&gt;
       * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public ApiResponse<GetDeliveryChallanDocumentResponse> getDeliveryChallanDocumentWithHttpInfo(String inboundPlanId, String shipmentId) throws ApiException, LWAException {
          com.squareup.okhttp.Call call = getDeliveryChallanDocumentValidateBeforeCall(inboundPlanId, shipmentId, null, null);
          Type localVarReturnType = new TypeToken<GetDeliveryChallanDocumentResponse>() {
          }.getType();
          return apiClient.execute(call, localVarReturnType);
      }
  
      /**
       * (asynchronously)
       * Provide delivery challan document for PCP transportation in IN marketplace.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 6 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId Identifier of an inbound plan. (required)
       * @param shipmentId    Identifier of a shipment. A shipment contains the boxes and units being inbounded. (required)
       * @param callback      The callback to be executed when the API call finishes
       * @return The request call
       * @throws ApiException If fail to process the API call, e.g. serializing the request body object
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public com.squareup.okhttp.Call getDeliveryChallanDocumentAsync(String inboundPlanId, String shipmentId, final ApiCallback<GetDeliveryChallanDocumentResponse> callback) throws ApiException, LWAException {
  
          ProgressResponseBody.ProgressListener progressListener = null;
          ProgressRequestBody.ProgressRequestListener progressRequestListener = null;
  
          if (callback != null) {
              progressListener = new ProgressResponseBody.ProgressListener() {
                  @Override
                  public void update(long bytesRead, long contentLength, boolean done) {
                      callback.onDownloadProgress(bytesRead, contentLength, done);
                  }
              };
  
              progressRequestListener = new ProgressRequestBody.ProgressRequestListener() {
                  @Override
                  public void onRequestProgress(long bytesWritten, long contentLength, boolean done) {
                      callback.onUploadProgress(bytesWritten, contentLength, done);
                  }
              };
          }
  
          com.squareup.okhttp.Call call = getDeliveryChallanDocumentValidateBeforeCall(inboundPlanId, shipmentId, progressListener, progressRequestListener);
          Type localVarReturnType = new TypeToken<GetDeliveryChallanDocumentResponse>() {
          }.getType();
          apiClient.executeAsync(call, localVarReturnType, callback);
          return call;
      }
  
      /**
       * Build call for getInboundOperationStatus
       *
       * @param operationId             Identifier of an asynchronous operation. (required)
       * @param progressListener        Progress listener
       * @param progressRequestListener Progress request listener
       * @return Call to execute
       * @throws ApiException If fail to serialize the request body object
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public com.squareup.okhttp.Call getInboundOperationStatusCall(String operationId, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException, LWAException {
          Object localVarPostBody = null;
  
          // create path and map variables
          String localVarPath = "/inbound/fba/2024-03-20/operations/{operationId}"
                  .replaceAll("\\{" + "operationId" + "\\}", apiClient.escapeString(operationId));
  
          List<Pair> localVarQueryParams = new ArrayList<Pair>();
          List<Pair> localVarCollectionQueryParams = new ArrayList<Pair>();
  
          Map<String, String> localVarHeaderParams = new HashMap<String, String>();
  
          Map<String, Object> localVarFormParams = new HashMap<String, Object>();
  
          final String[] localVarAccepts = {
                  "application/json"
          };
          final String localVarAccept = apiClient.selectHeaderAccept(localVarAccepts);
          if (localVarAccept != null) localVarHeaderParams.put("Accept", localVarAccept);
  
          final String[] localVarContentTypes = {
                  "application/json"
          };
          final String localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes);
          localVarHeaderParams.put("Content-Type", localVarContentType);
  
          if (progressListener != null) {
              apiClient.getHttpClient().networkInterceptors().add(new com.squareup.okhttp.Interceptor() {
                  @Override
                  public com.squareup.okhttp.Response intercept(com.squareup.okhttp.Interceptor.Chain chain) throws IOException {
                      com.squareup.okhttp.Response originalResponse = chain.proceed(chain.request());
                      return originalResponse.newBuilder()
                              .body(new ProgressResponseBody(originalResponse.body(), progressListener))
                              .build();
                  }
              });
          }
  
          String[] localVarAuthNames = new String[]{};
          return apiClient.buildCall(localVarPath, "GET", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarFormParams, localVarAuthNames, progressRequestListener);
      }
  
      @SuppressWarnings("rawtypes")
      private com.squareup.okhttp.Call getInboundOperationStatusValidateBeforeCall(String operationId, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException, LWAException {
  
          // verify the required parameter 'operationId' is set
          if (operationId == null) {
              throw new ApiException("Missing the required parameter 'operationId' when calling getInboundOperationStatus(Async)");
          }
  
  
          com.squareup.okhttp.Call call = getInboundOperationStatusCall(operationId, progressListener, progressRequestListener);
          return call;
  
      }
  
      /**
       * Gets the status of the processing of an asynchronous API call.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 6 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param operationId Identifier of an asynchronous operation. (required)
       * @return InboundOperationStatus
       * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public InboundOperationStatus getInboundOperationStatus(String operationId) throws ApiException, LWAException {
          ApiResponse<InboundOperationStatus> resp = getInboundOperationStatusWithHttpInfo(operationId);
          return resp.getData();
      }
  
      /**
       * Gets the status of the processing of an asynchronous API call.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 6 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param operationId Identifier of an asynchronous operation. (required)
       * @return ApiResponse&lt;InboundOperationStatus&gt;
       * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public ApiResponse<InboundOperationStatus> getInboundOperationStatusWithHttpInfo(String operationId) throws ApiException, LWAException {
          com.squareup.okhttp.Call call = getInboundOperationStatusValidateBeforeCall(operationId, null, null);
          Type localVarReturnType = new TypeToken<InboundOperationStatus>() {
          }.getType();
          return apiClient.execute(call, localVarReturnType);
      }
  
      /**
       * (asynchronously)
       * Gets the status of the processing of an asynchronous API call.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 6 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param operationId Identifier of an asynchronous operation. (required)
       * @param callback    The callback to be executed when the API call finishes
       * @return The request call
       * @throws ApiException If fail to process the API call, e.g. serializing the request body object
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public com.squareup.okhttp.Call getInboundOperationStatusAsync(String operationId, final ApiCallback<InboundOperationStatus> callback) throws ApiException, LWAException {
  
          ProgressResponseBody.ProgressListener progressListener = null;
          ProgressRequestBody.ProgressRequestListener progressRequestListener = null;
  
          if (callback != null) {
              progressListener = new ProgressResponseBody.ProgressListener() {
                  @Override
                  public void update(long bytesRead, long contentLength, boolean done) {
                      callback.onDownloadProgress(bytesRead, contentLength, done);
                  }
              };
  
              progressRequestListener = new ProgressRequestBody.ProgressRequestListener() {
                  @Override
                  public void onRequestProgress(long bytesWritten, long contentLength, boolean done) {
                      callback.onUploadProgress(bytesWritten, contentLength, done);
                  }
              };
          }
  
          com.squareup.okhttp.Call call = getInboundOperationStatusValidateBeforeCall(operationId, progressListener, progressRequestListener);
          Type localVarReturnType = new TypeToken<InboundOperationStatus>() {
          }.getType();
          apiClient.executeAsync(call, localVarReturnType, callback);
          return call;
      }
  
      /**
       * Build call for getInboundPlan
       *
       * @param inboundPlanId           Identifier of an inbound plan. (required)
       * @param progressListener        Progress listener
       * @param progressRequestListener Progress request listener
       * @return Call to execute
       * @throws ApiException If fail to serialize the request body object
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public com.squareup.okhttp.Call getInboundPlanCall(String inboundPlanId, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException, LWAException {
          Object localVarPostBody = null;
  
          // create path and map variables
          String localVarPath = "/inbound/fba/2024-03-20/inboundPlans/{inboundPlanId}"
                  .replaceAll("\\{" + "inboundPlanId" + "\\}", apiClient.escapeString(inboundPlanId));
  
          List<Pair> localVarQueryParams = new ArrayList<Pair>();
          List<Pair> localVarCollectionQueryParams = new ArrayList<Pair>();
  
          Map<String, String> localVarHeaderParams = new HashMap<String, String>();
  
          Map<String, Object> localVarFormParams = new HashMap<String, Object>();
  
          final String[] localVarAccepts = {
                  "application/json"
          };
          final String localVarAccept = apiClient.selectHeaderAccept(localVarAccepts);
          if (localVarAccept != null) localVarHeaderParams.put("Accept", localVarAccept);
  
          final String[] localVarContentTypes = {
                  "application/json"
          };
          final String localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes);
          localVarHeaderParams.put("Content-Type", localVarContentType);
  
          if (progressListener != null) {
              apiClient.getHttpClient().networkInterceptors().add(new com.squareup.okhttp.Interceptor() {
                  @Override
                  public com.squareup.okhttp.Response intercept(com.squareup.okhttp.Interceptor.Chain chain) throws IOException {
                      com.squareup.okhttp.Response originalResponse = chain.proceed(chain.request());
                      return originalResponse.newBuilder()
                              .body(new ProgressResponseBody(originalResponse.body(), progressListener))
                              .build();
                  }
              });
          }
  
          String[] localVarAuthNames = new String[]{};
          return apiClient.buildCall(localVarPath, "GET", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarFormParams, localVarAuthNames, progressRequestListener);
      }
  
      @SuppressWarnings("rawtypes")
      private com.squareup.okhttp.Call getInboundPlanValidateBeforeCall(String inboundPlanId, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException, LWAException {
  
          // verify the required parameter 'inboundPlanId' is set
          if (inboundPlanId == null) {
              throw new ApiException("Missing the required parameter 'inboundPlanId' when calling getInboundPlan(Async)");
          }
  
  
          com.squareup.okhttp.Call call = getInboundPlanCall(inboundPlanId, progressListener, progressRequestListener);
          return call;
  
      }
  
      /**
       * Fetches the top level information about an inbound plan.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 6 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId Identifier of an inbound plan. (required)
       * @return InboundPlan
       * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public InboundPlan getInboundPlan(String inboundPlanId) throws ApiException, LWAException {
          ApiResponse<InboundPlan> resp = getInboundPlanWithHttpInfo(inboundPlanId);
          return resp.getData();
      }
  
      /**
       * Fetches the top level information about an inbound plan.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 6 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId Identifier of an inbound plan. (required)
       * @return ApiResponse&lt;InboundPlan&gt;
       * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public ApiResponse<InboundPlan> getInboundPlanWithHttpInfo(String inboundPlanId) throws ApiException, LWAException {
          com.squareup.okhttp.Call call = getInboundPlanValidateBeforeCall(inboundPlanId, null, null);
          Type localVarReturnType = new TypeToken<InboundPlan>() {
          }.getType();
          return apiClient.execute(call, localVarReturnType);
      }
  
      /**
       * (asynchronously)
       * Fetches the top level information about an inbound plan.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 6 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId Identifier of an inbound plan. (required)
       * @param callback      The callback to be executed when the API call finishes
       * @return The request call
       * @throws ApiException If fail to process the API call, e.g. serializing the request body object
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public com.squareup.okhttp.Call getInboundPlanAsync(String inboundPlanId, final ApiCallback<InboundPlan> callback) throws ApiException, LWAException {
  
          ProgressResponseBody.ProgressListener progressListener = null;
          ProgressRequestBody.ProgressRequestListener progressRequestListener = null;
  
          if (callback != null) {
              progressListener = new ProgressResponseBody.ProgressListener() {
                  @Override
                  public void update(long bytesRead, long contentLength, boolean done) {
                      callback.onDownloadProgress(bytesRead, contentLength, done);
                  }
              };
  
              progressRequestListener = new ProgressRequestBody.ProgressRequestListener() {
                  @Override
                  public void onRequestProgress(long bytesWritten, long contentLength, boolean done) {
                      callback.onUploadProgress(bytesWritten, contentLength, done);
                  }
              };
          }
  
          com.squareup.okhttp.Call call = getInboundPlanValidateBeforeCall(inboundPlanId, progressListener, progressRequestListener);
          Type localVarReturnType = new TypeToken<InboundPlan>() {
          }.getType();
          apiClient.executeAsync(call, localVarReturnType, callback);
          return call;
      }
  
      /**
       * Build call for getSelfShipAppointmentSlots
       *
       * @param inboundPlanId           Identifier of an inbound plan. (required)
       * @param shipmentId              Identifier of a shipment. A shipment contains the boxes and units being inbounded. (required)
       * @param pageSize                The number of self ship appointment slots to return in the response matching the given query. (optional, default to 10)
       * @param paginationToken         A token to fetch a certain page when there are multiple pages worth of results. The value of this token is fetched from the &#x60;pagination&#x60; returned in the API response. In the absence of the token value from the query parameter the API returns the first page of the result. (optional)
       * @param progressListener        Progress listener
       * @param progressRequestListener Progress request listener
       * @return Call to execute
       * @throws ApiException If fail to serialize the request body object
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public com.squareup.okhttp.Call getSelfShipAppointmentSlotsCall(String inboundPlanId, String shipmentId, Integer pageSize, String paginationToken, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException, LWAException {
          Object localVarPostBody = null;
  
          // create path and map variables
          String localVarPath = "/inbound/fba/2024-03-20/inboundPlans/{inboundPlanId}/shipments/{shipmentId}/selfShipAppointmentSlots"
                  .replaceAll("\\{" + "inboundPlanId" + "\\}", apiClient.escapeString(inboundPlanId))
                  .replaceAll("\\{" + "shipmentId" + "\\}", apiClient.escapeString(shipmentId));
  
          List<Pair> localVarQueryParams = new ArrayList<Pair>();
          List<Pair> localVarCollectionQueryParams = new ArrayList<Pair>();
          if (pageSize != null)
              localVarQueryParams.addAll(apiClient.parameterToPair("pageSize", pageSize));
          if (paginationToken != null)
              localVarQueryParams.addAll(apiClient.parameterToPair("paginationToken", paginationToken));
  
          Map<String, String> localVarHeaderParams = new HashMap<String, String>();
  
          Map<String, Object> localVarFormParams = new HashMap<String, Object>();
  
          final String[] localVarAccepts = {
                  "application/json"
          };
          final String localVarAccept = apiClient.selectHeaderAccept(localVarAccepts);
          if (localVarAccept != null) localVarHeaderParams.put("Accept", localVarAccept);
  
          final String[] localVarContentTypes = {
                  "application/json"
          };
          final String localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes);
          localVarHeaderParams.put("Content-Type", localVarContentType);
  
          if (progressListener != null) {
              apiClient.getHttpClient().networkInterceptors().add(new com.squareup.okhttp.Interceptor() {
                  @Override
                  public com.squareup.okhttp.Response intercept(com.squareup.okhttp.Interceptor.Chain chain) throws IOException {
                      com.squareup.okhttp.Response originalResponse = chain.proceed(chain.request());
                      return originalResponse.newBuilder()
                              .body(new ProgressResponseBody(originalResponse.body(), progressListener))
                              .build();
                  }
              });
          }
  
          String[] localVarAuthNames = new String[]{};
          return apiClient.buildCall(localVarPath, "GET", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarFormParams, localVarAuthNames, progressRequestListener);
      }
  
      @SuppressWarnings("rawtypes")
      private com.squareup.okhttp.Call getSelfShipAppointmentSlotsValidateBeforeCall(String inboundPlanId, String shipmentId, Integer pageSize, String paginationToken, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException, LWAException {
  
          // verify the required parameter 'inboundPlanId' is set
          if (inboundPlanId == null) {
              throw new ApiException("Missing the required parameter 'inboundPlanId' when calling getSelfShipAppointmentSlots(Async)");
          }
  
          // verify the required parameter 'shipmentId' is set
          if (shipmentId == null) {
              throw new ApiException("Missing the required parameter 'shipmentId' when calling getSelfShipAppointmentSlots(Async)");
          }
  
  
          com.squareup.okhttp.Call call = getSelfShipAppointmentSlotsCall(inboundPlanId, shipmentId, pageSize, paginationToken, progressListener, progressRequestListener);
          return call;
  
      }
  
      /**
       * Retrieves a list of available self-ship appointment slots used to drop off a shipment at a warehouse.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 6 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId   Identifier of an inbound plan. (required)
       * @param shipmentId      Identifier of a shipment. A shipment contains the boxes and units being inbounded. (required)
       * @param pageSize        The number of self ship appointment slots to return in the response matching the given query. (optional, default to 10)
       * @param paginationToken A token to fetch a certain page when there are multiple pages worth of results. The value of this token is fetched from the &#x60;pagination&#x60; returned in the API response. In the absence of the token value from the query parameter the API returns the first page of the result. (optional)
       * @return GetSelfShipAppointmentSlotsResponse
       * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public GetSelfShipAppointmentSlotsResponse getSelfShipAppointmentSlots(String inboundPlanId, String shipmentId, Integer pageSize, String paginationToken) throws ApiException, LWAException {
          ApiResponse<GetSelfShipAppointmentSlotsResponse> resp = getSelfShipAppointmentSlotsWithHttpInfo(inboundPlanId, shipmentId, pageSize, paginationToken);
          return resp.getData();
      }
  
      /**
       * Retrieves a list of available self-ship appointment slots used to drop off a shipment at a warehouse.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 6 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId   Identifier of an inbound plan. (required)
       * @param shipmentId      Identifier of a shipment. A shipment contains the boxes and units being inbounded. (required)
       * @param pageSize        The number of self ship appointment slots to return in the response matching the given query. (optional, default to 10)
       * @param paginationToken A token to fetch a certain page when there are multiple pages worth of results. The value of this token is fetched from the &#x60;pagination&#x60; returned in the API response. In the absence of the token value from the query parameter the API returns the first page of the result. (optional)
       * @return ApiResponse&lt;GetSelfShipAppointmentSlotsResponse&gt;
       * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public ApiResponse<GetSelfShipAppointmentSlotsResponse> getSelfShipAppointmentSlotsWithHttpInfo(String inboundPlanId, String shipmentId, Integer pageSize, String paginationToken) throws ApiException, LWAException {
          com.squareup.okhttp.Call call = getSelfShipAppointmentSlotsValidateBeforeCall(inboundPlanId, shipmentId, pageSize, paginationToken, null, null);
          Type localVarReturnType = new TypeToken<GetSelfShipAppointmentSlotsResponse>() {
          }.getType();
          return apiClient.execute(call, localVarReturnType);
      }
  
      /**
       * (asynchronously)
       * Retrieves a list of available self-ship appointment slots used to drop off a shipment at a warehouse.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 6 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId   Identifier of an inbound plan. (required)
       * @param shipmentId      Identifier of a shipment. A shipment contains the boxes and units being inbounded. (required)
       * @param pageSize        The number of self ship appointment slots to return in the response matching the given query. (optional, default to 10)
       * @param paginationToken A token to fetch a certain page when there are multiple pages worth of results. The value of this token is fetched from the &#x60;pagination&#x60; returned in the API response. In the absence of the token value from the query parameter the API returns the first page of the result. (optional)
       * @param callback        The callback to be executed when the API call finishes
       * @return The request call
       * @throws ApiException If fail to process the API call, e.g. serializing the request body object
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public com.squareup.okhttp.Call getSelfShipAppointmentSlotsAsync(String inboundPlanId, String shipmentId, Integer pageSize, String paginationToken, final ApiCallback<GetSelfShipAppointmentSlotsResponse> callback) throws ApiException, LWAException {
  
          ProgressResponseBody.ProgressListener progressListener = null;
          ProgressRequestBody.ProgressRequestListener progressRequestListener = null;
  
          if (callback != null) {
              progressListener = new ProgressResponseBody.ProgressListener() {
                  @Override
                  public void update(long bytesRead, long contentLength, boolean done) {
                      callback.onDownloadProgress(bytesRead, contentLength, done);
                  }
              };
  
              progressRequestListener = new ProgressRequestBody.ProgressRequestListener() {
                  @Override
                  public void onRequestProgress(long bytesWritten, long contentLength, boolean done) {
                      callback.onUploadProgress(bytesWritten, contentLength, done);
                  }
              };
          }
  
          com.squareup.okhttp.Call call = getSelfShipAppointmentSlotsValidateBeforeCall(inboundPlanId, shipmentId, pageSize, paginationToken, progressListener, progressRequestListener);
          Type localVarReturnType = new TypeToken<GetSelfShipAppointmentSlotsResponse>() {
          }.getType();
          apiClient.executeAsync(call, localVarReturnType, callback);
          return call;
      }
  
      /**
       * Build call for getShipment
       *
       * @param inboundPlanId           Identifier of an inbound plan. (required)
       * @param shipmentId              Identifier of a shipment. A shipment contains the boxes and units being inbounded. (required)
       * @param progressListener        Progress listener
       * @param progressRequestListener Progress request listener
       * @return Call to execute
       * @throws ApiException If fail to serialize the request body object
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public com.squareup.okhttp.Call getShipmentCall(String inboundPlanId, String shipmentId, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException, LWAException {
          Object localVarPostBody = null;
  
          // create path and map variables
          String localVarPath = "/inbound/fba/2024-03-20/inboundPlans/{inboundPlanId}/shipments/{shipmentId}"
                  .replaceAll("\\{" + "inboundPlanId" + "\\}", apiClient.escapeString(inboundPlanId))
                  .replaceAll("\\{" + "shipmentId" + "\\}", apiClient.escapeString(shipmentId));
  
          List<Pair> localVarQueryParams = new ArrayList<Pair>();
          List<Pair> localVarCollectionQueryParams = new ArrayList<Pair>();
  
          Map<String, String> localVarHeaderParams = new HashMap<String, String>();
  
          Map<String, Object> localVarFormParams = new HashMap<String, Object>();
  
          final String[] localVarAccepts = {
                  "application/json"
          };
          final String localVarAccept = apiClient.selectHeaderAccept(localVarAccepts);
          if (localVarAccept != null) localVarHeaderParams.put("Accept", localVarAccept);
  
          final String[] localVarContentTypes = {
                  "application/json"
          };
          final String localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes);
          localVarHeaderParams.put("Content-Type", localVarContentType);
  
          if (progressListener != null) {
              apiClient.getHttpClient().networkInterceptors().add(new com.squareup.okhttp.Interceptor() {
                  @Override
                  public com.squareup.okhttp.Response intercept(com.squareup.okhttp.Interceptor.Chain chain) throws IOException {
                      com.squareup.okhttp.Response originalResponse = chain.proceed(chain.request());
                      return originalResponse.newBuilder()
                              .body(new ProgressResponseBody(originalResponse.body(), progressListener))
                              .build();
                  }
              });
          }
  
          String[] localVarAuthNames = new String[]{};
          return apiClient.buildCall(localVarPath, "GET", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarFormParams, localVarAuthNames, progressRequestListener);
      }
  
      @SuppressWarnings("rawtypes")
      private com.squareup.okhttp.Call getShipmentValidateBeforeCall(String inboundPlanId, String shipmentId, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException, LWAException {
  
          // verify the required parameter 'inboundPlanId' is set
          if (inboundPlanId == null) {
              throw new ApiException("Missing the required parameter 'inboundPlanId' when calling getShipment(Async)");
          }
  
          // verify the required parameter 'shipmentId' is set
          if (shipmentId == null) {
              throw new ApiException("Missing the required parameter 'shipmentId' when calling getShipment(Async)");
          }
  
  
          com.squareup.okhttp.Call call = getShipmentCall(inboundPlanId, shipmentId, progressListener, progressRequestListener);
          return call;
  
      }
  
      /**
       * Provides the full details for a specific shipment within an inbound plan. The &#x60;transportationOptionId&#x60; inside &#x60;acceptedTransportationSelection&#x60; can be used to retrieve the transportation details for the shipment.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 6 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId Identifier of an inbound plan. (required)
       * @param shipmentId    Identifier of a shipment. A shipment contains the boxes and units being inbounded. (required)
       * @return Shipment
       * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public Shipment getShipment(String inboundPlanId, String shipmentId) throws ApiException, LWAException {
          ApiResponse<Shipment> resp = getShipmentWithHttpInfo(inboundPlanId, shipmentId);
          return resp.getData();
      }
  
      /**
       * Provides the full details for a specific shipment within an inbound plan. The &#x60;transportationOptionId&#x60; inside &#x60;acceptedTransportationSelection&#x60; can be used to retrieve the transportation details for the shipment.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 6 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId Identifier of an inbound plan. (required)
       * @param shipmentId    Identifier of a shipment. A shipment contains the boxes and units being inbounded. (required)
       * @return ApiResponse&lt;Shipment&gt;
       * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public ApiResponse<Shipment> getShipmentWithHttpInfo(String inboundPlanId, String shipmentId) throws ApiException, LWAException {
          com.squareup.okhttp.Call call = getShipmentValidateBeforeCall(inboundPlanId, shipmentId, null, null);
          Type localVarReturnType = new TypeToken<Shipment>() {
          }.getType();
          return apiClient.execute(call, localVarReturnType);
      }
  
      /**
       * (asynchronously)
       * Provides the full details for a specific shipment within an inbound plan. The &#x60;transportationOptionId&#x60; inside &#x60;acceptedTransportationSelection&#x60; can be used to retrieve the transportation details for the shipment.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 6 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId Identifier of an inbound plan. (required)
       * @param shipmentId    Identifier of a shipment. A shipment contains the boxes and units being inbounded. (required)
       * @param callback      The callback to be executed when the API call finishes
       * @return The request call
       * @throws ApiException If fail to process the API call, e.g. serializing the request body object
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public com.squareup.okhttp.Call getShipmentAsync(String inboundPlanId, String shipmentId, final ApiCallback<Shipment> callback) throws ApiException, LWAException {
  
          ProgressResponseBody.ProgressListener progressListener = null;
          ProgressRequestBody.ProgressRequestListener progressRequestListener = null;
  
          if (callback != null) {
              progressListener = new ProgressResponseBody.ProgressListener() {
                  @Override
                  public void update(long bytesRead, long contentLength, boolean done) {
                      callback.onDownloadProgress(bytesRead, contentLength, done);
                  }
              };
  
              progressRequestListener = new ProgressRequestBody.ProgressRequestListener() {
                  @Override
                  public void onRequestProgress(long bytesWritten, long contentLength, boolean done) {
                      callback.onUploadProgress(bytesWritten, contentLength, done);
                  }
              };
          }
  
          com.squareup.okhttp.Call call = getShipmentValidateBeforeCall(inboundPlanId, shipmentId, progressListener, progressRequestListener);
          Type localVarReturnType = new TypeToken<Shipment>() {
          }.getType();
          apiClient.executeAsync(call, localVarReturnType, callback);
          return call;
      }
  
      /**
       * Build call for getShipmentContentUpdatePreview
       *
       * @param inboundPlanId           Identifier of an inbound plan. (required)
       * @param shipmentId              Identifier of a shipment. A shipment contains the boxes and units being inbounded. (required)
       * @param contentUpdatePreviewId  Identifier of a content update preview. (required)
       * @param progressListener        Progress listener
       * @param progressRequestListener Progress request listener
       * @return Call to execute
       * @throws ApiException If fail to serialize the request body object
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public com.squareup.okhttp.Call getShipmentContentUpdatePreviewCall(String inboundPlanId, String shipmentId, String contentUpdatePreviewId, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException, LWAException {
          Object localVarPostBody = null;
  
          // create path and map variables
          String localVarPath = "/inbound/fba/2024-03-20/inboundPlans/{inboundPlanId}/shipments/{shipmentId}/contentUpdatePreviews/{contentUpdatePreviewId}"
                  .replaceAll("\\{" + "inboundPlanId" + "\\}", apiClient.escapeString(inboundPlanId))
                  .replaceAll("\\{" + "shipmentId" + "\\}", apiClient.escapeString(shipmentId))
                  .replaceAll("\\{" + "contentUpdatePreviewId" + "\\}", apiClient.escapeString(contentUpdatePreviewId));
  
          List<Pair> localVarQueryParams = new ArrayList<Pair>();
          List<Pair> localVarCollectionQueryParams = new ArrayList<Pair>();
  
          Map<String, String> localVarHeaderParams = new HashMap<String, String>();
  
          Map<String, Object> localVarFormParams = new HashMap<String, Object>();
  
          final String[] localVarAccepts = {
                  "application/json"
          };
          final String localVarAccept = apiClient.selectHeaderAccept(localVarAccepts);
          if (localVarAccept != null) localVarHeaderParams.put("Accept", localVarAccept);
  
          final String[] localVarContentTypes = {
                  "application/json"
          };
          final String localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes);
          localVarHeaderParams.put("Content-Type", localVarContentType);
  
          if (progressListener != null) {
              apiClient.getHttpClient().networkInterceptors().add(new com.squareup.okhttp.Interceptor() {
                  @Override
                  public com.squareup.okhttp.Response intercept(com.squareup.okhttp.Interceptor.Chain chain) throws IOException {
                      com.squareup.okhttp.Response originalResponse = chain.proceed(chain.request());
                      return originalResponse.newBuilder()
                              .body(new ProgressResponseBody(originalResponse.body(), progressListener))
                              .build();
                  }
              });
          }
  
          String[] localVarAuthNames = new String[]{};
          return apiClient.buildCall(localVarPath, "GET", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarFormParams, localVarAuthNames, progressRequestListener);
      }
  
      @SuppressWarnings("rawtypes")
      private com.squareup.okhttp.Call getShipmentContentUpdatePreviewValidateBeforeCall(String inboundPlanId, String shipmentId, String contentUpdatePreviewId, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException, LWAException {
  
          // verify the required parameter 'inboundPlanId' is set
          if (inboundPlanId == null) {
              throw new ApiException("Missing the required parameter 'inboundPlanId' when calling getShipmentContentUpdatePreview(Async)");
          }
  
          // verify the required parameter 'shipmentId' is set
          if (shipmentId == null) {
              throw new ApiException("Missing the required parameter 'shipmentId' when calling getShipmentContentUpdatePreview(Async)");
          }
  
          // verify the required parameter 'contentUpdatePreviewId' is set
          if (contentUpdatePreviewId == null) {
              throw new ApiException("Missing the required parameter 'contentUpdatePreviewId' when calling getShipmentContentUpdatePreview(Async)");
          }
  
  
          com.squareup.okhttp.Call call = getShipmentContentUpdatePreviewCall(inboundPlanId, shipmentId, contentUpdatePreviewId, progressListener, progressRequestListener);
          return call;
  
      }
  
      /**
       * Retrieve a shipment content update preview which provides a summary of the requested shipment content changes along with the transportation cost implications of the change that can only be confirmed prior to the expiry date specified.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 30 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId          Identifier of an inbound plan. (required)
       * @param shipmentId             Identifier of a shipment. A shipment contains the boxes and units being inbounded. (required)
       * @param contentUpdatePreviewId Identifier of a content update preview. (required)
       * @return ContentUpdatePreview
       * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public ContentUpdatePreview getShipmentContentUpdatePreview(String inboundPlanId, String shipmentId, String contentUpdatePreviewId) throws ApiException, LWAException {
          ApiResponse<ContentUpdatePreview> resp = getShipmentContentUpdatePreviewWithHttpInfo(inboundPlanId, shipmentId, contentUpdatePreviewId);
          return resp.getData();
      }
  
      /**
       * Retrieve a shipment content update preview which provides a summary of the requested shipment content changes along with the transportation cost implications of the change that can only be confirmed prior to the expiry date specified.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 30 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId          Identifier of an inbound plan. (required)
       * @param shipmentId             Identifier of a shipment. A shipment contains the boxes and units being inbounded. (required)
       * @param contentUpdatePreviewId Identifier of a content update preview. (required)
       * @return ApiResponse&lt;ContentUpdatePreview&gt;
       * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public ApiResponse<ContentUpdatePreview> getShipmentContentUpdatePreviewWithHttpInfo(String inboundPlanId, String shipmentId, String contentUpdatePreviewId) throws ApiException, LWAException {
          com.squareup.okhttp.Call call = getShipmentContentUpdatePreviewValidateBeforeCall(inboundPlanId, shipmentId, contentUpdatePreviewId, null, null);
          Type localVarReturnType = new TypeToken<ContentUpdatePreview>() {
          }.getType();
          return apiClient.execute(call, localVarReturnType);
      }
  
      /**
       * (asynchronously)
       * Retrieve a shipment content update preview which provides a summary of the requested shipment content changes along with the transportation cost implications of the change that can only be confirmed prior to the expiry date specified.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 30 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId          Identifier of an inbound plan. (required)
       * @param shipmentId             Identifier of a shipment. A shipment contains the boxes and units being inbounded. (required)
       * @param contentUpdatePreviewId Identifier of a content update preview. (required)
       * @param callback               The callback to be executed when the API call finishes
       * @return The request call
       * @throws ApiException If fail to process the API call, e.g. serializing the request body object
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public com.squareup.okhttp.Call getShipmentContentUpdatePreviewAsync(String inboundPlanId, String shipmentId, String contentUpdatePreviewId, final ApiCallback<ContentUpdatePreview> callback) throws ApiException, LWAException {
  
          ProgressResponseBody.ProgressListener progressListener = null;
          ProgressRequestBody.ProgressRequestListener progressRequestListener = null;
  
          if (callback != null) {
              progressListener = new ProgressResponseBody.ProgressListener() {
                  @Override
                  public void update(long bytesRead, long contentLength, boolean done) {
                      callback.onDownloadProgress(bytesRead, contentLength, done);
                  }
              };
  
              progressRequestListener = new ProgressRequestBody.ProgressRequestListener() {
                  @Override
                  public void onRequestProgress(long bytesWritten, long contentLength, boolean done) {
                      callback.onUploadProgress(bytesWritten, contentLength, done);
                  }
              };
          }
  
          com.squareup.okhttp.Call call = getShipmentContentUpdatePreviewValidateBeforeCall(inboundPlanId, shipmentId, contentUpdatePreviewId, progressListener, progressRequestListener);
          Type localVarReturnType = new TypeToken<ContentUpdatePreview>() {
          }.getType();
          apiClient.executeAsync(call, localVarReturnType, callback);
          return call;
      }
  
      /**
       * Build call for listDeliveryWindowOptions
       *
       * @param inboundPlanId           Identifier of an inbound plan. (required)
       * @param shipmentId              The shipment to get delivery window options for. (required)
       * @param pageSize                The number of delivery window options to return in the response matching the given query. (optional, default to 10)
       * @param paginationToken         A token to fetch a certain page when there are multiple pages worth of results. The value of this token is fetched from the &#x60;pagination&#x60; returned in the API response. In the absence of the token value from the query parameter the API returns the first page of the result. (optional)
       * @param progressListener        Progress listener
       * @param progressRequestListener Progress request listener
       * @return Call to execute
       * @throws ApiException If fail to serialize the request body object
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public com.squareup.okhttp.Call listDeliveryWindowOptionsCall(String inboundPlanId, String shipmentId, Integer pageSize, String paginationToken, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException, LWAException {
          Object localVarPostBody = null;
  
          // create path and map variables
          String localVarPath = "/inbound/fba/2024-03-20/inboundPlans/{inboundPlanId}/shipments/{shipmentId}/deliveryWindowOptions"
                  .replaceAll("\\{" + "inboundPlanId" + "\\}", apiClient.escapeString(inboundPlanId))
                  .replaceAll("\\{" + "shipmentId" + "\\}", apiClient.escapeString(shipmentId));
  
          List<Pair> localVarQueryParams = new ArrayList<Pair>();
          List<Pair> localVarCollectionQueryParams = new ArrayList<Pair>();
          if (pageSize != null)
              localVarQueryParams.addAll(apiClient.parameterToPair("pageSize", pageSize));
          if (paginationToken != null)
              localVarQueryParams.addAll(apiClient.parameterToPair("paginationToken", paginationToken));
  
          Map<String, String> localVarHeaderParams = new HashMap<String, String>();
  
          Map<String, Object> localVarFormParams = new HashMap<String, Object>();
  
          final String[] localVarAccepts = {
                  "application/json"
          };
          final String localVarAccept = apiClient.selectHeaderAccept(localVarAccepts);
          if (localVarAccept != null) localVarHeaderParams.put("Accept", localVarAccept);
  
          final String[] localVarContentTypes = {
                  "application/json"
          };
          final String localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes);
          localVarHeaderParams.put("Content-Type", localVarContentType);
  
          if (progressListener != null) {
              apiClient.getHttpClient().networkInterceptors().add(new com.squareup.okhttp.Interceptor() {
                  @Override
                  public com.squareup.okhttp.Response intercept(com.squareup.okhttp.Interceptor.Chain chain) throws IOException {
                      com.squareup.okhttp.Response originalResponse = chain.proceed(chain.request());
                      return originalResponse.newBuilder()
                              .body(new ProgressResponseBody(originalResponse.body(), progressListener))
                              .build();
                  }
              });
          }
  
          String[] localVarAuthNames = new String[]{};
          return apiClient.buildCall(localVarPath, "GET", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarFormParams, localVarAuthNames, progressRequestListener);
      }
  
      @SuppressWarnings("rawtypes")
      private com.squareup.okhttp.Call listDeliveryWindowOptionsValidateBeforeCall(String inboundPlanId, String shipmentId, Integer pageSize, String paginationToken, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException, LWAException {
  
          // verify the required parameter 'inboundPlanId' is set
          if (inboundPlanId == null) {
              throw new ApiException("Missing the required parameter 'inboundPlanId' when calling listDeliveryWindowOptions(Async)");
          }
  
          // verify the required parameter 'shipmentId' is set
          if (shipmentId == null) {
              throw new ApiException("Missing the required parameter 'shipmentId' when calling listDeliveryWindowOptions(Async)");
          }
  
  
          com.squareup.okhttp.Call call = listDeliveryWindowOptionsCall(inboundPlanId, shipmentId, pageSize, paginationToken, progressListener, progressRequestListener);
          return call;
  
      }
  
      /**
       * Retrieves all delivery window options for a shipment. Delivery window options must first be generated by the &#x60;generateDeliveryWindowOptions&#x60; operation before becoming available.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 30 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId   Identifier of an inbound plan. (required)
       * @param shipmentId      The shipment to get delivery window options for. (required)
       * @param pageSize        The number of delivery window options to return in the response matching the given query. (optional, default to 10)
       * @param paginationToken A token to fetch a certain page when there are multiple pages worth of results. The value of this token is fetched from the &#x60;pagination&#x60; returned in the API response. In the absence of the token value from the query parameter the API returns the first page of the result. (optional)
       * @return ListDeliveryWindowOptionsResponse
       * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public ListDeliveryWindowOptionsResponse listDeliveryWindowOptions(String inboundPlanId, String shipmentId, Integer pageSize, String paginationToken) throws ApiException, LWAException {
          ApiResponse<ListDeliveryWindowOptionsResponse> resp = listDeliveryWindowOptionsWithHttpInfo(inboundPlanId, shipmentId, pageSize, paginationToken);
          return resp.getData();
      }
  
      /**
       * Retrieves all delivery window options for a shipment. Delivery window options must first be generated by the &#x60;generateDeliveryWindowOptions&#x60; operation before becoming available.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 30 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId   Identifier of an inbound plan. (required)
       * @param shipmentId      The shipment to get delivery window options for. (required)
       * @param pageSize        The number of delivery window options to return in the response matching the given query. (optional, default to 10)
       * @param paginationToken A token to fetch a certain page when there are multiple pages worth of results. The value of this token is fetched from the &#x60;pagination&#x60; returned in the API response. In the absence of the token value from the query parameter the API returns the first page of the result. (optional)
       * @return ApiResponse&lt;ListDeliveryWindowOptionsResponse&gt;
       * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public ApiResponse<ListDeliveryWindowOptionsResponse> listDeliveryWindowOptionsWithHttpInfo(String inboundPlanId, String shipmentId, Integer pageSize, String paginationToken) throws ApiException, LWAException {
          com.squareup.okhttp.Call call = listDeliveryWindowOptionsValidateBeforeCall(inboundPlanId, shipmentId, pageSize, paginationToken, null, null);
          Type localVarReturnType = new TypeToken<ListDeliveryWindowOptionsResponse>() {
          }.getType();
          return apiClient.execute(call, localVarReturnType);
      }
  
      /**
       * (asynchronously)
       * Retrieves all delivery window options for a shipment. Delivery window options must first be generated by the &#x60;generateDeliveryWindowOptions&#x60; operation before becoming available.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 30 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId   Identifier of an inbound plan. (required)
       * @param shipmentId      The shipment to get delivery window options for. (required)
       * @param pageSize        The number of delivery window options to return in the response matching the given query. (optional, default to 10)
       * @param paginationToken A token to fetch a certain page when there are multiple pages worth of results. The value of this token is fetched from the &#x60;pagination&#x60; returned in the API response. In the absence of the token value from the query parameter the API returns the first page of the result. (optional)
       * @param callback        The callback to be executed when the API call finishes
       * @return The request call
       * @throws ApiException If fail to process the API call, e.g. serializing the request body object
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public com.squareup.okhttp.Call listDeliveryWindowOptionsAsync(String inboundPlanId, String shipmentId, Integer pageSize, String paginationToken, final ApiCallback<ListDeliveryWindowOptionsResponse> callback) throws ApiException, LWAException {
  
          ProgressResponseBody.ProgressListener progressListener = null;
          ProgressRequestBody.ProgressRequestListener progressRequestListener = null;
  
          if (callback != null) {
              progressListener = new ProgressResponseBody.ProgressListener() {
                  @Override
                  public void update(long bytesRead, long contentLength, boolean done) {
                      callback.onDownloadProgress(bytesRead, contentLength, done);
                  }
              };
  
              progressRequestListener = new ProgressRequestBody.ProgressRequestListener() {
                  @Override
                  public void onRequestProgress(long bytesWritten, long contentLength, boolean done) {
                      callback.onUploadProgress(bytesWritten, contentLength, done);
                  }
              };
          }
  
          com.squareup.okhttp.Call call = listDeliveryWindowOptionsValidateBeforeCall(inboundPlanId, shipmentId, pageSize, paginationToken, progressListener, progressRequestListener);
          Type localVarReturnType = new TypeToken<ListDeliveryWindowOptionsResponse>() {
          }.getType();
          apiClient.executeAsync(call, localVarReturnType, callback);
          return call;
      }
  
      /**
       * Build call for listInboundPlanBoxes
       *
       * @param inboundPlanId           Identifier of an inbound plan. (required)
       * @param pageSize                The number of boxes to return in the response matching the given query. (optional, default to 10)
       * @param paginationToken         A token to fetch a certain page when there are multiple pages worth of results. The value of this token is fetched from the &#x60;pagination&#x60; returned in the API response. In the absence of the token value from the query parameter the API returns the first page of the result. (optional)
       * @param progressListener        Progress listener
       * @param progressRequestListener Progress request listener
       * @return Call to execute
       * @throws ApiException If fail to serialize the request body object
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public com.squareup.okhttp.Call listInboundPlanBoxesCall(String inboundPlanId, Integer pageSize, String paginationToken, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException, LWAException {
          Object localVarPostBody = null;
  
          // create path and map variables
          String localVarPath = "/inbound/fba/2024-03-20/inboundPlans/{inboundPlanId}/boxes"
                  .replaceAll("\\{" + "inboundPlanId" + "\\}", apiClient.escapeString(inboundPlanId));
  
          List<Pair> localVarQueryParams = new ArrayList<Pair>();
          List<Pair> localVarCollectionQueryParams = new ArrayList<Pair>();
          if (pageSize != null)
              localVarQueryParams.addAll(apiClient.parameterToPair("pageSize", pageSize));
          if (paginationToken != null)
              localVarQueryParams.addAll(apiClient.parameterToPair("paginationToken", paginationToken));
  
          Map<String, String> localVarHeaderParams = new HashMap<String, String>();
  
          Map<String, Object> localVarFormParams = new HashMap<String, Object>();
  
          final String[] localVarAccepts = {
                  "application/json"
          };
          final String localVarAccept = apiClient.selectHeaderAccept(localVarAccepts);
          if (localVarAccept != null) localVarHeaderParams.put("Accept", localVarAccept);
  
          final String[] localVarContentTypes = {
                  "application/json"
          };
          final String localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes);
          localVarHeaderParams.put("Content-Type", localVarContentType);
  
          if (progressListener != null) {
              apiClient.getHttpClient().networkInterceptors().add(new com.squareup.okhttp.Interceptor() {
                  @Override
                  public com.squareup.okhttp.Response intercept(com.squareup.okhttp.Interceptor.Chain chain) throws IOException {
                      com.squareup.okhttp.Response originalResponse = chain.proceed(chain.request());
                      return originalResponse.newBuilder()
                              .body(new ProgressResponseBody(originalResponse.body(), progressListener))
                              .build();
                  }
              });
          }
  
          String[] localVarAuthNames = new String[]{};
          return apiClient.buildCall(localVarPath, "GET", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarFormParams, localVarAuthNames, progressRequestListener);
      }
  
      @SuppressWarnings("rawtypes")
      private com.squareup.okhttp.Call listInboundPlanBoxesValidateBeforeCall(String inboundPlanId, Integer pageSize, String paginationToken, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException, LWAException {
  
          // verify the required parameter 'inboundPlanId' is set
          if (inboundPlanId == null) {
              throw new ApiException("Missing the required parameter 'inboundPlanId' when calling listInboundPlanBoxes(Async)");
          }
  
  
          com.squareup.okhttp.Call call = listInboundPlanBoxesCall(inboundPlanId, pageSize, paginationToken, progressListener, progressRequestListener);
          return call;
  
      }
  
      /**
       * Provides a paginated list of box packages in an inbound plan.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 6 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId   Identifier of an inbound plan. (required)
       * @param pageSize        The number of boxes to return in the response matching the given query. (optional, default to 10)
       * @param paginationToken A token to fetch a certain page when there are multiple pages worth of results. The value of this token is fetched from the &#x60;pagination&#x60; returned in the API response. In the absence of the token value from the query parameter the API returns the first page of the result. (optional)
       * @return ListInboundPlanBoxesResponse
       * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public ListInboundPlanBoxesResponse listInboundPlanBoxes(String inboundPlanId, Integer pageSize, String paginationToken) throws ApiException, LWAException {
          ApiResponse<ListInboundPlanBoxesResponse> resp = listInboundPlanBoxesWithHttpInfo(inboundPlanId, pageSize, paginationToken);
          return resp.getData();
      }
  
      /**
       * Provides a paginated list of box packages in an inbound plan.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 6 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId   Identifier of an inbound plan. (required)
       * @param pageSize        The number of boxes to return in the response matching the given query. (optional, default to 10)
       * @param paginationToken A token to fetch a certain page when there are multiple pages worth of results. The value of this token is fetched from the &#x60;pagination&#x60; returned in the API response. In the absence of the token value from the query parameter the API returns the first page of the result. (optional)
       * @return ApiResponse&lt;ListInboundPlanBoxesResponse&gt;
       * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public ApiResponse<ListInboundPlanBoxesResponse> listInboundPlanBoxesWithHttpInfo(String inboundPlanId, Integer pageSize, String paginationToken) throws ApiException, LWAException {
          com.squareup.okhttp.Call call = listInboundPlanBoxesValidateBeforeCall(inboundPlanId, pageSize, paginationToken, null, null);
          Type localVarReturnType = new TypeToken<ListInboundPlanBoxesResponse>() {
          }.getType();
          return apiClient.execute(call, localVarReturnType);
      }
  
      /**
       * (asynchronously)
       * Provides a paginated list of box packages in an inbound plan.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 6 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId   Identifier of an inbound plan. (required)
       * @param pageSize        The number of boxes to return in the response matching the given query. (optional, default to 10)
       * @param paginationToken A token to fetch a certain page when there are multiple pages worth of results. The value of this token is fetched from the &#x60;pagination&#x60; returned in the API response. In the absence of the token value from the query parameter the API returns the first page of the result. (optional)
       * @param callback        The callback to be executed when the API call finishes
       * @return The request call
       * @throws ApiException If fail to process the API call, e.g. serializing the request body object
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public com.squareup.okhttp.Call listInboundPlanBoxesAsync(String inboundPlanId, Integer pageSize, String paginationToken, final ApiCallback<ListInboundPlanBoxesResponse> callback) throws ApiException, LWAException {
  
          ProgressResponseBody.ProgressListener progressListener = null;
          ProgressRequestBody.ProgressRequestListener progressRequestListener = null;
  
          if (callback != null) {
              progressListener = new ProgressResponseBody.ProgressListener() {
                  @Override
                  public void update(long bytesRead, long contentLength, boolean done) {
                      callback.onDownloadProgress(bytesRead, contentLength, done);
                  }
              };
  
              progressRequestListener = new ProgressRequestBody.ProgressRequestListener() {
                  @Override
                  public void onRequestProgress(long bytesWritten, long contentLength, boolean done) {
                      callback.onUploadProgress(bytesWritten, contentLength, done);
                  }
              };
          }
  
          com.squareup.okhttp.Call call = listInboundPlanBoxesValidateBeforeCall(inboundPlanId, pageSize, paginationToken, progressListener, progressRequestListener);
          Type localVarReturnType = new TypeToken<ListInboundPlanBoxesResponse>() {
          }.getType();
          apiClient.executeAsync(call, localVarReturnType, callback);
          return call;
      }
  
      /**
       * Build call for listInboundPlanItems
       *
       * @param inboundPlanId           Identifier of an inbound plan. (required)
       * @param pageSize                The number of items to return in the response matching the given query. (optional, default to 10)
       * @param paginationToken         A token to fetch a certain page when there are multiple pages worth of results. The value of this token is fetched from the &#x60;pagination&#x60; returned in the API response. In the absence of the token value from the query parameter the API returns the first page of the result. (optional)
       * @param progressListener        Progress listener
       * @param progressRequestListener Progress request listener
       * @return Call to execute
       * @throws ApiException If fail to serialize the request body object
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public com.squareup.okhttp.Call listInboundPlanItemsCall(String inboundPlanId, Integer pageSize, String paginationToken, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException, LWAException {
          Object localVarPostBody = null;
  
          // create path and map variables
          String localVarPath = "/inbound/fba/2024-03-20/inboundPlans/{inboundPlanId}/items"
                  .replaceAll("\\{" + "inboundPlanId" + "\\}", apiClient.escapeString(inboundPlanId));
  
          List<Pair> localVarQueryParams = new ArrayList<Pair>();
          List<Pair> localVarCollectionQueryParams = new ArrayList<Pair>();
          if (pageSize != null)
              localVarQueryParams.addAll(apiClient.parameterToPair("pageSize", pageSize));
          if (paginationToken != null)
              localVarQueryParams.addAll(apiClient.parameterToPair("paginationToken", paginationToken));
  
          Map<String, String> localVarHeaderParams = new HashMap<String, String>();
  
          Map<String, Object> localVarFormParams = new HashMap<String, Object>();
  
          final String[] localVarAccepts = {
                  "application/json"
          };
          final String localVarAccept = apiClient.selectHeaderAccept(localVarAccepts);
          if (localVarAccept != null) localVarHeaderParams.put("Accept", localVarAccept);
  
          final String[] localVarContentTypes = {
                  "application/json"
          };
          final String localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes);
          localVarHeaderParams.put("Content-Type", localVarContentType);
  
          if (progressListener != null) {
              apiClient.getHttpClient().networkInterceptors().add(new com.squareup.okhttp.Interceptor() {
                  @Override
                  public com.squareup.okhttp.Response intercept(com.squareup.okhttp.Interceptor.Chain chain) throws IOException {
                      com.squareup.okhttp.Response originalResponse = chain.proceed(chain.request());
                      return originalResponse.newBuilder()
                              .body(new ProgressResponseBody(originalResponse.body(), progressListener))
                              .build();
                  }
              });
          }
  
          String[] localVarAuthNames = new String[]{};
          return apiClient.buildCall(localVarPath, "GET", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarFormParams, localVarAuthNames, progressRequestListener);
      }
  
      @SuppressWarnings("rawtypes")
      private com.squareup.okhttp.Call listInboundPlanItemsValidateBeforeCall(String inboundPlanId, Integer pageSize, String paginationToken, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException, LWAException {
  
          // verify the required parameter 'inboundPlanId' is set
          if (inboundPlanId == null) {
              throw new ApiException("Missing the required parameter 'inboundPlanId' when calling listInboundPlanItems(Async)");
          }
  
  
          com.squareup.okhttp.Call call = listInboundPlanItemsCall(inboundPlanId, pageSize, paginationToken, progressListener, progressRequestListener);
          return call;
  
      }
  
      /**
       * Provides a paginated list of item packages in an inbound plan.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 6 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId   Identifier of an inbound plan. (required)
       * @param pageSize        The number of items to return in the response matching the given query. (optional, default to 10)
       * @param paginationToken A token to fetch a certain page when there are multiple pages worth of results. The value of this token is fetched from the &#x60;pagination&#x60; returned in the API response. In the absence of the token value from the query parameter the API returns the first page of the result. (optional)
       * @return ListInboundPlanItemsResponse
       * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public ListInboundPlanItemsResponse listInboundPlanItems(String inboundPlanId, Integer pageSize, String paginationToken) throws ApiException, LWAException {
          ApiResponse<ListInboundPlanItemsResponse> resp = listInboundPlanItemsWithHttpInfo(inboundPlanId, pageSize, paginationToken);
          return resp.getData();
      }
  
      /**
       * Provides a paginated list of item packages in an inbound plan.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 6 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId   Identifier of an inbound plan. (required)
       * @param pageSize        The number of items to return in the response matching the given query. (optional, default to 10)
       * @param paginationToken A token to fetch a certain page when there are multiple pages worth of results. The value of this token is fetched from the &#x60;pagination&#x60; returned in the API response. In the absence of the token value from the query parameter the API returns the first page of the result. (optional)
       * @return ApiResponse&lt;ListInboundPlanItemsResponse&gt;
       * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public ApiResponse<ListInboundPlanItemsResponse> listInboundPlanItemsWithHttpInfo(String inboundPlanId, Integer pageSize, String paginationToken) throws ApiException, LWAException {
          com.squareup.okhttp.Call call = listInboundPlanItemsValidateBeforeCall(inboundPlanId, pageSize, paginationToken, null, null);
          Type localVarReturnType = new TypeToken<ListInboundPlanItemsResponse>() {
          }.getType();
          return apiClient.execute(call, localVarReturnType);
      }
  
      /**
       * (asynchronously)
       * Provides a paginated list of item packages in an inbound plan.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 6 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId   Identifier of an inbound plan. (required)
       * @param pageSize        The number of items to return in the response matching the given query. (optional, default to 10)
       * @param paginationToken A token to fetch a certain page when there are multiple pages worth of results. The value of this token is fetched from the &#x60;pagination&#x60; returned in the API response. In the absence of the token value from the query parameter the API returns the first page of the result. (optional)
       * @param callback        The callback to be executed when the API call finishes
       * @return The request call
       * @throws ApiException If fail to process the API call, e.g. serializing the request body object
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public com.squareup.okhttp.Call listInboundPlanItemsAsync(String inboundPlanId, Integer pageSize, String paginationToken, final ApiCallback<ListInboundPlanItemsResponse> callback) throws ApiException, LWAException {
  
          ProgressResponseBody.ProgressListener progressListener = null;
          ProgressRequestBody.ProgressRequestListener progressRequestListener = null;
  
          if (callback != null) {
              progressListener = new ProgressResponseBody.ProgressListener() {
                  @Override
                  public void update(long bytesRead, long contentLength, boolean done) {
                      callback.onDownloadProgress(bytesRead, contentLength, done);
                  }
              };
  
              progressRequestListener = new ProgressRequestBody.ProgressRequestListener() {
                  @Override
                  public void onRequestProgress(long bytesWritten, long contentLength, boolean done) {
                      callback.onUploadProgress(bytesWritten, contentLength, done);
                  }
              };
          }
  
          com.squareup.okhttp.Call call = listInboundPlanItemsValidateBeforeCall(inboundPlanId, pageSize, paginationToken, progressListener, progressRequestListener);
          Type localVarReturnType = new TypeToken<ListInboundPlanItemsResponse>() {
          }.getType();
          apiClient.executeAsync(call, localVarReturnType, callback);
          return call;
      }
  
      /**
       * Build call for listInboundPlanPallets
       *
       * @param inboundPlanId           Identifier of an inbound plan. (required)
       * @param pageSize                The number of pallets to return in the response matching the given query. (optional, default to 10)
       * @param paginationToken         A token to fetch a certain page when there are multiple pages worth of results. The value of this token is fetched from the &#x60;pagination&#x60; returned in the API response. In the absence of the token value from the query parameter the API returns the first page of the result. (optional)
       * @param progressListener        Progress listener
       * @param progressRequestListener Progress request listener
       * @return Call to execute
       * @throws ApiException If fail to serialize the request body object
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public com.squareup.okhttp.Call listInboundPlanPalletsCall(String inboundPlanId, Integer pageSize, String paginationToken, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException, LWAException {
          Object localVarPostBody = null;
  
          // create path and map variables
          String localVarPath = "/inbound/fba/2024-03-20/inboundPlans/{inboundPlanId}/pallets"
                  .replaceAll("\\{" + "inboundPlanId" + "\\}", apiClient.escapeString(inboundPlanId));
  
          List<Pair> localVarQueryParams = new ArrayList<Pair>();
          List<Pair> localVarCollectionQueryParams = new ArrayList<Pair>();
          if (pageSize != null)
              localVarQueryParams.addAll(apiClient.parameterToPair("pageSize", pageSize));
          if (paginationToken != null)
              localVarQueryParams.addAll(apiClient.parameterToPair("paginationToken", paginationToken));
  
          Map<String, String> localVarHeaderParams = new HashMap<String, String>();
  
          Map<String, Object> localVarFormParams = new HashMap<String, Object>();
  
          final String[] localVarAccepts = {
                  "application/json"
          };
          final String localVarAccept = apiClient.selectHeaderAccept(localVarAccepts);
          if (localVarAccept != null) localVarHeaderParams.put("Accept", localVarAccept);
  
          final String[] localVarContentTypes = {
                  "application/json"
          };
          final String localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes);
          localVarHeaderParams.put("Content-Type", localVarContentType);
  
          if (progressListener != null) {
              apiClient.getHttpClient().networkInterceptors().add(new com.squareup.okhttp.Interceptor() {
                  @Override
                  public com.squareup.okhttp.Response intercept(com.squareup.okhttp.Interceptor.Chain chain) throws IOException {
                      com.squareup.okhttp.Response originalResponse = chain.proceed(chain.request());
                      return originalResponse.newBuilder()
                              .body(new ProgressResponseBody(originalResponse.body(), progressListener))
                              .build();
                  }
              });
          }
  
          String[] localVarAuthNames = new String[]{};
          return apiClient.buildCall(localVarPath, "GET", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarFormParams, localVarAuthNames, progressRequestListener);
      }
  
      @SuppressWarnings("rawtypes")
      private com.squareup.okhttp.Call listInboundPlanPalletsValidateBeforeCall(String inboundPlanId, Integer pageSize, String paginationToken, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException, LWAException {
  
          // verify the required parameter 'inboundPlanId' is set
          if (inboundPlanId == null) {
              throw new ApiException("Missing the required parameter 'inboundPlanId' when calling listInboundPlanPallets(Async)");
          }
  
  
          com.squareup.okhttp.Call call = listInboundPlanPalletsCall(inboundPlanId, pageSize, paginationToken, progressListener, progressRequestListener);
          return call;
  
      }
  
      /**
       * Provides a paginated list of pallet packages in an inbound plan. An inbound plan will have pallets when the related details are provided after generating Less-Than-Truckload (LTL) carrier shipments.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 6 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId   Identifier of an inbound plan. (required)
       * @param pageSize        The number of pallets to return in the response matching the given query. (optional, default to 10)
       * @param paginationToken A token to fetch a certain page when there are multiple pages worth of results. The value of this token is fetched from the &#x60;pagination&#x60; returned in the API response. In the absence of the token value from the query parameter the API returns the first page of the result. (optional)
       * @return ListInboundPlanPalletsResponse
       * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public ListInboundPlanPalletsResponse listInboundPlanPallets(String inboundPlanId, Integer pageSize, String paginationToken) throws ApiException, LWAException {
          ApiResponse<ListInboundPlanPalletsResponse> resp = listInboundPlanPalletsWithHttpInfo(inboundPlanId, pageSize, paginationToken);
          return resp.getData();
      }
  
      /**
       * Provides a paginated list of pallet packages in an inbound plan. An inbound plan will have pallets when the related details are provided after generating Less-Than-Truckload (LTL) carrier shipments.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 6 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId   Identifier of an inbound plan. (required)
       * @param pageSize        The number of pallets to return in the response matching the given query. (optional, default to 10)
       * @param paginationToken A token to fetch a certain page when there are multiple pages worth of results. The value of this token is fetched from the &#x60;pagination&#x60; returned in the API response. In the absence of the token value from the query parameter the API returns the first page of the result. (optional)
       * @return ApiResponse&lt;ListInboundPlanPalletsResponse&gt;
       * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public ApiResponse<ListInboundPlanPalletsResponse> listInboundPlanPalletsWithHttpInfo(String inboundPlanId, Integer pageSize, String paginationToken) throws ApiException, LWAException {
          com.squareup.okhttp.Call call = listInboundPlanPalletsValidateBeforeCall(inboundPlanId, pageSize, paginationToken, null, null);
          Type localVarReturnType = new TypeToken<ListInboundPlanPalletsResponse>() {
          }.getType();
          return apiClient.execute(call, localVarReturnType);
      }
  
      /**
       * (asynchronously)
       * Provides a paginated list of pallet packages in an inbound plan. An inbound plan will have pallets when the related details are provided after generating Less-Than-Truckload (LTL) carrier shipments.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 6 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId   Identifier of an inbound plan. (required)
       * @param pageSize        The number of pallets to return in the response matching the given query. (optional, default to 10)
       * @param paginationToken A token to fetch a certain page when there are multiple pages worth of results. The value of this token is fetched from the &#x60;pagination&#x60; returned in the API response. In the absence of the token value from the query parameter the API returns the first page of the result. (optional)
       * @param callback        The callback to be executed when the API call finishes
       * @return The request call
       * @throws ApiException If fail to process the API call, e.g. serializing the request body object
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public com.squareup.okhttp.Call listInboundPlanPalletsAsync(String inboundPlanId, Integer pageSize, String paginationToken, final ApiCallback<ListInboundPlanPalletsResponse> callback) throws ApiException, LWAException {
  
          ProgressResponseBody.ProgressListener progressListener = null;
          ProgressRequestBody.ProgressRequestListener progressRequestListener = null;
  
          if (callback != null) {
              progressListener = new ProgressResponseBody.ProgressListener() {
                  @Override
                  public void update(long bytesRead, long contentLength, boolean done) {
                      callback.onDownloadProgress(bytesRead, contentLength, done);
                  }
              };
  
              progressRequestListener = new ProgressRequestBody.ProgressRequestListener() {
                  @Override
                  public void onRequestProgress(long bytesWritten, long contentLength, boolean done) {
                      callback.onUploadProgress(bytesWritten, contentLength, done);
                  }
              };
          }
  
          com.squareup.okhttp.Call call = listInboundPlanPalletsValidateBeforeCall(inboundPlanId, pageSize, paginationToken, progressListener, progressRequestListener);
          Type localVarReturnType = new TypeToken<ListInboundPlanPalletsResponse>() {
          }.getType();
          apiClient.executeAsync(call, localVarReturnType, callback);
          return call;
      }
  
      /**
       * Build call for listInboundPlans
       *
       * @param pageSize                The number of inbound plans to return in the response matching the given query. (optional, default to 10)
       * @param paginationToken         A token to fetch a certain page when there are multiple pages worth of results. The value of this token is fetched from the &#x60;pagination&#x60; returned in the API response. In the absence of the token value from the query parameter the API returns the first page of the result. (optional)
       * @param status                  The status of an inbound plan. (optional)
       * @param sortBy                  Sort by field. (optional)
       * @param sortOrder               The sort order. (optional)
       * @param progressListener        Progress listener
       * @param progressRequestListener Progress request listener
       * @return Call to execute
       * @throws ApiException If fail to serialize the request body object
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public com.squareup.okhttp.Call listInboundPlansCall(Integer pageSize, String paginationToken, String status, String sortBy, String sortOrder, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException, LWAException {
          Object localVarPostBody = null;
  
          // create path and map variables
          String localVarPath = "/inbound/fba/2024-03-20/inboundPlans";
  
          List<Pair> localVarQueryParams = new ArrayList<Pair>();
          List<Pair> localVarCollectionQueryParams = new ArrayList<Pair>();
          if (pageSize != null)
              localVarQueryParams.addAll(apiClient.parameterToPair("pageSize", pageSize));
          if (paginationToken != null)
              localVarQueryParams.addAll(apiClient.parameterToPair("paginationToken", paginationToken));
          if (status != null)
              localVarQueryParams.addAll(apiClient.parameterToPair("status", status));
          if (sortBy != null)
              localVarQueryParams.addAll(apiClient.parameterToPair("sortBy", sortBy));
          if (sortOrder != null)
              localVarQueryParams.addAll(apiClient.parameterToPair("sortOrder", sortOrder));
  
          Map<String, String> localVarHeaderParams = new HashMap<String, String>();
  
          Map<String, Object> localVarFormParams = new HashMap<String, Object>();
  
          final String[] localVarAccepts = {
                  "application/json"
          };
          final String localVarAccept = apiClient.selectHeaderAccept(localVarAccepts);
          if (localVarAccept != null) localVarHeaderParams.put("Accept", localVarAccept);
  
          final String[] localVarContentTypes = {
                  "application/json"
          };
          final String localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes);
          localVarHeaderParams.put("Content-Type", localVarContentType);
  
          if (progressListener != null) {
              apiClient.getHttpClient().networkInterceptors().add(new com.squareup.okhttp.Interceptor() {
                  @Override
                  public com.squareup.okhttp.Response intercept(com.squareup.okhttp.Interceptor.Chain chain) throws IOException {
                      com.squareup.okhttp.Response originalResponse = chain.proceed(chain.request());
                      return originalResponse.newBuilder()
                              .body(new ProgressResponseBody(originalResponse.body(), progressListener))
                              .build();
                  }
              });
          }
  
          String[] localVarAuthNames = new String[]{};
          return apiClient.buildCall(localVarPath, "GET", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarFormParams, localVarAuthNames, progressRequestListener);
      }
  
      @SuppressWarnings("rawtypes")
      private com.squareup.okhttp.Call listInboundPlansValidateBeforeCall(Integer pageSize, String paginationToken, String status, String sortBy, String sortOrder, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException, LWAException {
  
  
          com.squareup.okhttp.Call call = listInboundPlansCall(pageSize, paginationToken, status, sortBy, sortOrder, progressListener, progressRequestListener);
          return call;
  
      }
  
      /**
       * Provides a list of inbound plans with minimal information.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 6 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param pageSize        The number of inbound plans to return in the response matching the given query. (optional, default to 10)
       * @param paginationToken A token to fetch a certain page when there are multiple pages worth of results. The value of this token is fetched from the &#x60;pagination&#x60; returned in the API response. In the absence of the token value from the query parameter the API returns the first page of the result. (optional)
       * @param status          The status of an inbound plan. (optional)
       * @param sortBy          Sort by field. (optional)
       * @param sortOrder       The sort order. (optional)
       * @return ListInboundPlansResponse
       * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public ListInboundPlansResponse listInboundPlans(Integer pageSize, String paginationToken, String status, String sortBy, String sortOrder) throws ApiException, LWAException {
          ApiResponse<ListInboundPlansResponse> resp = listInboundPlansWithHttpInfo(pageSize, paginationToken, status, sortBy, sortOrder);
          return resp.getData();
      }
  
      /**
       * Provides a list of inbound plans with minimal information.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 6 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param pageSize        The number of inbound plans to return in the response matching the given query. (optional, default to 10)
       * @param paginationToken A token to fetch a certain page when there are multiple pages worth of results. The value of this token is fetched from the &#x60;pagination&#x60; returned in the API response. In the absence of the token value from the query parameter the API returns the first page of the result. (optional)
       * @param status          The status of an inbound plan. (optional)
       * @param sortBy          Sort by field. (optional)
       * @param sortOrder       The sort order. (optional)
       * @return ApiResponse&lt;ListInboundPlansResponse&gt;
       * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public ApiResponse<ListInboundPlansResponse> listInboundPlansWithHttpInfo(Integer pageSize, String paginationToken, String status, String sortBy, String sortOrder) throws ApiException, LWAException {
          com.squareup.okhttp.Call call = listInboundPlansValidateBeforeCall(pageSize, paginationToken, status, sortBy, sortOrder, null, null);
          Type localVarReturnType = new TypeToken<ListInboundPlansResponse>() {
          }.getType();
          return apiClient.execute(call, localVarReturnType);
      }
  
      /**
       * (asynchronously)
       * Provides a list of inbound plans with minimal information.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 6 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param pageSize        The number of inbound plans to return in the response matching the given query. (optional, default to 10)
       * @param paginationToken A token to fetch a certain page when there are multiple pages worth of results. The value of this token is fetched from the &#x60;pagination&#x60; returned in the API response. In the absence of the token value from the query parameter the API returns the first page of the result. (optional)
       * @param status          The status of an inbound plan. (optional)
       * @param sortBy          Sort by field. (optional)
       * @param sortOrder       The sort order. (optional)
       * @param callback        The callback to be executed when the API call finishes
       * @return The request call
       * @throws ApiException If fail to process the API call, e.g. serializing the request body object
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public com.squareup.okhttp.Call listInboundPlansAsync(Integer pageSize, String paginationToken, String status, String sortBy, String sortOrder, final ApiCallback<ListInboundPlansResponse> callback) throws ApiException, LWAException {
  
          ProgressResponseBody.ProgressListener progressListener = null;
          ProgressRequestBody.ProgressRequestListener progressRequestListener = null;
  
          if (callback != null) {
              progressListener = new ProgressResponseBody.ProgressListener() {
                  @Override
                  public void update(long bytesRead, long contentLength, boolean done) {
                      callback.onDownloadProgress(bytesRead, contentLength, done);
                  }
              };
  
              progressRequestListener = new ProgressRequestBody.ProgressRequestListener() {
                  @Override
                  public void onRequestProgress(long bytesWritten, long contentLength, boolean done) {
                      callback.onUploadProgress(bytesWritten, contentLength, done);
                  }
              };
          }
  
          com.squareup.okhttp.Call call = listInboundPlansValidateBeforeCall(pageSize, paginationToken, status, sortBy, sortOrder, progressListener, progressRequestListener);
          Type localVarReturnType = new TypeToken<ListInboundPlansResponse>() {
          }.getType();
          apiClient.executeAsync(call, localVarReturnType, callback);
          return call;
      }
  
      /**
       * Build call for listItemComplianceDetails
       *
       * @param mskus                   List of merchant SKUs - a merchant-supplied identifier for a specific SKU. (required)
       * @param marketplaceId           The Marketplace ID. Refer to [Marketplace IDs](https://developer-docs.amazon.com/sp-api/docs/marketplace-ids) for a list of possible values. (required)
       * @param progressListener        Progress listener
       * @param progressRequestListener Progress request listener
       * @return Call to execute
       * @throws ApiException If fail to serialize the request body object
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public com.squareup.okhttp.Call listItemComplianceDetailsCall(List<String> mskus, String marketplaceId, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException, LWAException {
          Object localVarPostBody = null;
  
          // create path and map variables
          String localVarPath = "/inbound/fba/2024-03-20/items/compliance";
  
          List<Pair> localVarQueryParams = new ArrayList<Pair>();
          List<Pair> localVarCollectionQueryParams = new ArrayList<Pair>();
          if (mskus != null)
              localVarCollectionQueryParams.addAll(apiClient.parameterToPairs("multi", "mskus", mskus));
          if (marketplaceId != null)
              localVarQueryParams.addAll(apiClient.parameterToPair("marketplaceId", marketplaceId));
  
          Map<String, String> localVarHeaderParams = new HashMap<String, String>();
  
          Map<String, Object> localVarFormParams = new HashMap<String, Object>();
  
          final String[] localVarAccepts = {
                  "application/json"
          };
          final String localVarAccept = apiClient.selectHeaderAccept(localVarAccepts);
          if (localVarAccept != null) localVarHeaderParams.put("Accept", localVarAccept);
  
          final String[] localVarContentTypes = {
                  "application/json"
          };
          final String localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes);
          localVarHeaderParams.put("Content-Type", localVarContentType);
  
          if (progressListener != null) {
              apiClient.getHttpClient().networkInterceptors().add(new com.squareup.okhttp.Interceptor() {
                  @Override
                  public com.squareup.okhttp.Response intercept(com.squareup.okhttp.Interceptor.Chain chain) throws IOException {
                      com.squareup.okhttp.Response originalResponse = chain.proceed(chain.request());
                      return originalResponse.newBuilder()
                              .body(new ProgressResponseBody(originalResponse.body(), progressListener))
                              .build();
                  }
              });
          }
  
          String[] localVarAuthNames = new String[]{};
          return apiClient.buildCall(localVarPath, "GET", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarFormParams, localVarAuthNames, progressRequestListener);
      }
  
      @SuppressWarnings("rawtypes")
      private com.squareup.okhttp.Call listItemComplianceDetailsValidateBeforeCall(List<String> mskus, String marketplaceId, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException, LWAException {
  
          // verify the required parameter 'mskus' is set
          if (mskus == null) {
              throw new ApiException("Missing the required parameter 'mskus' when calling listItemComplianceDetails(Async)");
          }
  
          // verify the required parameter 'marketplaceId' is set
          if (marketplaceId == null) {
              throw new ApiException("Missing the required parameter 'marketplaceId' when calling listItemComplianceDetails(Async)");
          }
  
  
          com.squareup.okhttp.Call call = listItemComplianceDetailsCall(mskus, marketplaceId, progressListener, progressRequestListener);
          return call;
  
      }
  
      /**
       * List the inbound compliance details for MSKUs in a given marketplace.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 6 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param mskus         List of merchant SKUs - a merchant-supplied identifier for a specific SKU. (required)
       * @param marketplaceId The Marketplace ID. Refer to [Marketplace IDs](https://developer-docs.amazon.com/sp-api/docs/marketplace-ids) for a list of possible values. (required)
       * @return ListItemComplianceDetailsResponse
       * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public ListItemComplianceDetailsResponse listItemComplianceDetails(List<String> mskus, String marketplaceId) throws ApiException, LWAException {
          ApiResponse<ListItemComplianceDetailsResponse> resp = listItemComplianceDetailsWithHttpInfo(mskus, marketplaceId);
          return resp.getData();
      }
  
      /**
       * List the inbound compliance details for MSKUs in a given marketplace.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 6 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param mskus         List of merchant SKUs - a merchant-supplied identifier for a specific SKU. (required)
       * @param marketplaceId The Marketplace ID. Refer to [Marketplace IDs](https://developer-docs.amazon.com/sp-api/docs/marketplace-ids) for a list of possible values. (required)
       * @return ApiResponse&lt;ListItemComplianceDetailsResponse&gt;
       * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public ApiResponse<ListItemComplianceDetailsResponse> listItemComplianceDetailsWithHttpInfo(List<String> mskus, String marketplaceId) throws ApiException, LWAException {
          com.squareup.okhttp.Call call = listItemComplianceDetailsValidateBeforeCall(mskus, marketplaceId, null, null);
          Type localVarReturnType = new TypeToken<ListItemComplianceDetailsResponse>() {
          }.getType();
          return apiClient.execute(call, localVarReturnType);
      }
  
      /**
       * (asynchronously)
       * List the inbound compliance details for MSKUs in a given marketplace.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 6 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param mskus         List of merchant SKUs - a merchant-supplied identifier for a specific SKU. (required)
       * @param marketplaceId The Marketplace ID. Refer to [Marketplace IDs](https://developer-docs.amazon.com/sp-api/docs/marketplace-ids) for a list of possible values. (required)
       * @param callback      The callback to be executed when the API call finishes
       * @return The request call
       * @throws ApiException If fail to process the API call, e.g. serializing the request body object
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public com.squareup.okhttp.Call listItemComplianceDetailsAsync(List<String> mskus, String marketplaceId, final ApiCallback<ListItemComplianceDetailsResponse> callback) throws ApiException, LWAException {
  
          ProgressResponseBody.ProgressListener progressListener = null;
          ProgressRequestBody.ProgressRequestListener progressRequestListener = null;
  
          if (callback != null) {
              progressListener = new ProgressResponseBody.ProgressListener() {
                  @Override
                  public void update(long bytesRead, long contentLength, boolean done) {
                      callback.onDownloadProgress(bytesRead, contentLength, done);
                  }
              };
  
              progressRequestListener = new ProgressRequestBody.ProgressRequestListener() {
                  @Override
                  public void onRequestProgress(long bytesWritten, long contentLength, boolean done) {
                      callback.onUploadProgress(bytesWritten, contentLength, done);
                  }
              };
          }
  
          com.squareup.okhttp.Call call = listItemComplianceDetailsValidateBeforeCall(mskus, marketplaceId, progressListener, progressRequestListener);
          Type localVarReturnType = new TypeToken<ListItemComplianceDetailsResponse>() {
          }.getType();
          apiClient.executeAsync(call, localVarReturnType, callback);
          return call;
      }
  
      /**
       * Build call for listPackingGroupBoxes
       *
       * @param inboundPlanId           Identifier of an inbound plan. (required)
       * @param packingGroupId          Identifier of a packing group. (required)
       * @param pageSize                The number of packing group boxes to return in the response matching the given query. (optional, default to 10)
       * @param paginationToken         A token to fetch a certain page when there are multiple pages worth of results. The value of this token is fetched from the &#x60;pagination&#x60; returned in the API response. In the absence of the token value from the query parameter the API returns the first page of the result. (optional)
       * @param progressListener        Progress listener
       * @param progressRequestListener Progress request listener
       * @return Call to execute
       * @throws ApiException If fail to serialize the request body object
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public com.squareup.okhttp.Call listPackingGroupBoxesCall(String inboundPlanId, String packingGroupId, Integer pageSize, String paginationToken, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException, LWAException {
          Object localVarPostBody = null;
  
          // create path and map variables
          String localVarPath = "/inbound/fba/2024-03-20/inboundPlans/{inboundPlanId}/packingGroups/{packingGroupId}/boxes"
                  .replaceAll("\\{" + "inboundPlanId" + "\\}", apiClient.escapeString(inboundPlanId))
                  .replaceAll("\\{" + "packingGroupId" + "\\}", apiClient.escapeString(packingGroupId));
  
          List<Pair> localVarQueryParams = new ArrayList<Pair>();
          List<Pair> localVarCollectionQueryParams = new ArrayList<Pair>();
          if (pageSize != null)
              localVarQueryParams.addAll(apiClient.parameterToPair("pageSize", pageSize));
          if (paginationToken != null)
              localVarQueryParams.addAll(apiClient.parameterToPair("paginationToken", paginationToken));
  
          Map<String, String> localVarHeaderParams = new HashMap<String, String>();
  
          Map<String, Object> localVarFormParams = new HashMap<String, Object>();
  
          final String[] localVarAccepts = {
                  "application/json"
          };
          final String localVarAccept = apiClient.selectHeaderAccept(localVarAccepts);
          if (localVarAccept != null) localVarHeaderParams.put("Accept", localVarAccept);
  
          final String[] localVarContentTypes = {
                  "application/json"
          };
          final String localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes);
          localVarHeaderParams.put("Content-Type", localVarContentType);
  
          if (progressListener != null) {
              apiClient.getHttpClient().networkInterceptors().add(new com.squareup.okhttp.Interceptor() {
                  @Override
                  public com.squareup.okhttp.Response intercept(com.squareup.okhttp.Interceptor.Chain chain) throws IOException {
                      com.squareup.okhttp.Response originalResponse = chain.proceed(chain.request());
                      return originalResponse.newBuilder()
                              .body(new ProgressResponseBody(originalResponse.body(), progressListener))
                              .build();
                  }
              });
          }
  
          String[] localVarAuthNames = new String[]{};
          return apiClient.buildCall(localVarPath, "GET", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarFormParams, localVarAuthNames, progressRequestListener);
      }
  
      @SuppressWarnings("rawtypes")
      private com.squareup.okhttp.Call listPackingGroupBoxesValidateBeforeCall(String inboundPlanId, String packingGroupId, Integer pageSize, String paginationToken, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException, LWAException {
  
          // verify the required parameter 'inboundPlanId' is set
          if (inboundPlanId == null) {
              throw new ApiException("Missing the required parameter 'inboundPlanId' when calling listPackingGroupBoxes(Async)");
          }
  
          // verify the required parameter 'packingGroupId' is set
          if (packingGroupId == null) {
              throw new ApiException("Missing the required parameter 'packingGroupId' when calling listPackingGroupBoxes(Async)");
          }
  
  
          com.squareup.okhttp.Call call = listPackingGroupBoxesCall(inboundPlanId, packingGroupId, pageSize, paginationToken, progressListener, progressRequestListener);
          return call;
  
      }
  
      /**
       * Retrieves a page of boxes from a given packing group. These boxes were previously provided through the &#x60;setPackingInformation&#x60; operation. This API is used for workflows where boxes are packed before Amazon determines shipment splits.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 30 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId   Identifier of an inbound plan. (required)
       * @param packingGroupId  Identifier of a packing group. (required)
       * @param pageSize        The number of packing group boxes to return in the response matching the given query. (optional, default to 10)
       * @param paginationToken A token to fetch a certain page when there are multiple pages worth of results. The value of this token is fetched from the &#x60;pagination&#x60; returned in the API response. In the absence of the token value from the query parameter the API returns the first page of the result. (optional)
       * @return ListPackingGroupBoxesResponse
       * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public ListPackingGroupBoxesResponse listPackingGroupBoxes(String inboundPlanId, String packingGroupId, Integer pageSize, String paginationToken) throws ApiException, LWAException {
          ApiResponse<ListPackingGroupBoxesResponse> resp = listPackingGroupBoxesWithHttpInfo(inboundPlanId, packingGroupId, pageSize, paginationToken);
          return resp.getData();
      }
  
      /**
       * Retrieves a page of boxes from a given packing group. These boxes were previously provided through the &#x60;setPackingInformation&#x60; operation. This API is used for workflows where boxes are packed before Amazon determines shipment splits.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 30 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId   Identifier of an inbound plan. (required)
       * @param packingGroupId  Identifier of a packing group. (required)
       * @param pageSize        The number of packing group boxes to return in the response matching the given query. (optional, default to 10)
       * @param paginationToken A token to fetch a certain page when there are multiple pages worth of results. The value of this token is fetched from the &#x60;pagination&#x60; returned in the API response. In the absence of the token value from the query parameter the API returns the first page of the result. (optional)
       * @return ApiResponse&lt;ListPackingGroupBoxesResponse&gt;
       * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public ApiResponse<ListPackingGroupBoxesResponse> listPackingGroupBoxesWithHttpInfo(String inboundPlanId, String packingGroupId, Integer pageSize, String paginationToken) throws ApiException, LWAException {
          com.squareup.okhttp.Call call = listPackingGroupBoxesValidateBeforeCall(inboundPlanId, packingGroupId, pageSize, paginationToken, null, null);
          Type localVarReturnType = new TypeToken<ListPackingGroupBoxesResponse>() {
          }.getType();
          return apiClient.execute(call, localVarReturnType);
      }
  
      /**
       * (asynchronously)
       * Retrieves a page of boxes from a given packing group. These boxes were previously provided through the &#x60;setPackingInformation&#x60; operation. This API is used for workflows where boxes are packed before Amazon determines shipment splits.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 30 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId   Identifier of an inbound plan. (required)
       * @param packingGroupId  Identifier of a packing group. (required)
       * @param pageSize        The number of packing group boxes to return in the response matching the given query. (optional, default to 10)
       * @param paginationToken A token to fetch a certain page when there are multiple pages worth of results. The value of this token is fetched from the &#x60;pagination&#x60; returned in the API response. In the absence of the token value from the query parameter the API returns the first page of the result. (optional)
       * @param callback        The callback to be executed when the API call finishes
       * @return The request call
       * @throws ApiException If fail to process the API call, e.g. serializing the request body object
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public com.squareup.okhttp.Call listPackingGroupBoxesAsync(String inboundPlanId, String packingGroupId, Integer pageSize, String paginationToken, final ApiCallback<ListPackingGroupBoxesResponse> callback) throws ApiException, LWAException {
  
          ProgressResponseBody.ProgressListener progressListener = null;
          ProgressRequestBody.ProgressRequestListener progressRequestListener = null;
  
          if (callback != null) {
              progressListener = new ProgressResponseBody.ProgressListener() {
                  @Override
                  public void update(long bytesRead, long contentLength, boolean done) {
                      callback.onDownloadProgress(bytesRead, contentLength, done);
                  }
              };
  
              progressRequestListener = new ProgressRequestBody.ProgressRequestListener() {
                  @Override
                  public void onRequestProgress(long bytesWritten, long contentLength, boolean done) {
                      callback.onUploadProgress(bytesWritten, contentLength, done);
                  }
              };
          }
  
          com.squareup.okhttp.Call call = listPackingGroupBoxesValidateBeforeCall(inboundPlanId, packingGroupId, pageSize, paginationToken, progressListener, progressRequestListener);
          Type localVarReturnType = new TypeToken<ListPackingGroupBoxesResponse>() {
          }.getType();
          apiClient.executeAsync(call, localVarReturnType, callback);
          return call;
      }
  
      /**
       * Build call for listPackingGroupItems
       *
       * @param inboundPlanId           Identifier of an inbound plan. (required)
       * @param packingGroupId          Identifier of a packing group. (required)
       * @param pageSize                The number of packing group items to return in the response matching the given query. (optional, default to 10)
       * @param paginationToken         A token to fetch a certain page when there are multiple pages worth of results. The value of this token is fetched from the &#x60;pagination&#x60; returned in the API response. In the absence of the token value from the query parameter the API returns the first page of the result. (optional)
       * @param progressListener        Progress listener
       * @param progressRequestListener Progress request listener
       * @return Call to execute
       * @throws ApiException If fail to serialize the request body object
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public com.squareup.okhttp.Call listPackingGroupItemsCall(String inboundPlanId, String packingGroupId, Integer pageSize, String paginationToken, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException, LWAException {
          Object localVarPostBody = null;
  
          // create path and map variables
          String localVarPath = "/inbound/fba/2024-03-20/inboundPlans/{inboundPlanId}/packingGroups/{packingGroupId}/items"
                  .replaceAll("\\{" + "inboundPlanId" + "\\}", apiClient.escapeString(inboundPlanId))
                  .replaceAll("\\{" + "packingGroupId" + "\\}", apiClient.escapeString(packingGroupId));
  
          List<Pair> localVarQueryParams = new ArrayList<Pair>();
          List<Pair> localVarCollectionQueryParams = new ArrayList<Pair>();
          if (pageSize != null)
              localVarQueryParams.addAll(apiClient.parameterToPair("pageSize", pageSize));
          if (paginationToken != null)
              localVarQueryParams.addAll(apiClient.parameterToPair("paginationToken", paginationToken));
  
          Map<String, String> localVarHeaderParams = new HashMap<String, String>();
  
          Map<String, Object> localVarFormParams = new HashMap<String, Object>();
  
          final String[] localVarAccepts = {
                  "application/json"
          };
          final String localVarAccept = apiClient.selectHeaderAccept(localVarAccepts);
          if (localVarAccept != null) localVarHeaderParams.put("Accept", localVarAccept);
  
          final String[] localVarContentTypes = {
                  "application/json"
          };
          final String localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes);
          localVarHeaderParams.put("Content-Type", localVarContentType);
  
          if (progressListener != null) {
              apiClient.getHttpClient().networkInterceptors().add(new com.squareup.okhttp.Interceptor() {
                  @Override
                  public com.squareup.okhttp.Response intercept(com.squareup.okhttp.Interceptor.Chain chain) throws IOException {
                      com.squareup.okhttp.Response originalResponse = chain.proceed(chain.request());
                      return originalResponse.newBuilder()
                              .body(new ProgressResponseBody(originalResponse.body(), progressListener))
                              .build();
                  }
              });
          }
  
          String[] localVarAuthNames = new String[]{};
          return apiClient.buildCall(localVarPath, "GET", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarFormParams, localVarAuthNames, progressRequestListener);
      }
  
      @SuppressWarnings("rawtypes")
      private com.squareup.okhttp.Call listPackingGroupItemsValidateBeforeCall(String inboundPlanId, String packingGroupId, Integer pageSize, String paginationToken, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException, LWAException {
  
          // verify the required parameter 'inboundPlanId' is set
          if (inboundPlanId == null) {
              throw new ApiException("Missing the required parameter 'inboundPlanId' when calling listPackingGroupItems(Async)");
          }
  
          // verify the required parameter 'packingGroupId' is set
          if (packingGroupId == null) {
              throw new ApiException("Missing the required parameter 'packingGroupId' when calling listPackingGroupItems(Async)");
          }
  
  
          com.squareup.okhttp.Call call = listPackingGroupItemsCall(inboundPlanId, packingGroupId, pageSize, paginationToken, progressListener, progressRequestListener);
          return call;
  
      }
  
      /**
       * Retrieves a page of items in a given packing group. Packing options must first be generated by the corresponding operation before packing group items can be listed.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 30 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId   Identifier of an inbound plan. (required)
       * @param packingGroupId  Identifier of a packing group. (required)
       * @param pageSize        The number of packing group items to return in the response matching the given query. (optional, default to 10)
       * @param paginationToken A token to fetch a certain page when there are multiple pages worth of results. The value of this token is fetched from the &#x60;pagination&#x60; returned in the API response. In the absence of the token value from the query parameter the API returns the first page of the result. (optional)
       * @return ListPackingGroupItemsResponse
       * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public ListPackingGroupItemsResponse listPackingGroupItems(String inboundPlanId, String packingGroupId, Integer pageSize, String paginationToken) throws ApiException, LWAException {
          ApiResponse<ListPackingGroupItemsResponse> resp = listPackingGroupItemsWithHttpInfo(inboundPlanId, packingGroupId, pageSize, paginationToken);
          return resp.getData();
      }
  
      /**
       * Retrieves a page of items in a given packing group. Packing options must first be generated by the corresponding operation before packing group items can be listed.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 30 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId   Identifier of an inbound plan. (required)
       * @param packingGroupId  Identifier of a packing group. (required)
       * @param pageSize        The number of packing group items to return in the response matching the given query. (optional, default to 10)
       * @param paginationToken A token to fetch a certain page when there are multiple pages worth of results. The value of this token is fetched from the &#x60;pagination&#x60; returned in the API response. In the absence of the token value from the query parameter the API returns the first page of the result. (optional)
       * @return ApiResponse&lt;ListPackingGroupItemsResponse&gt;
       * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public ApiResponse<ListPackingGroupItemsResponse> listPackingGroupItemsWithHttpInfo(String inboundPlanId, String packingGroupId, Integer pageSize, String paginationToken) throws ApiException, LWAException {
          com.squareup.okhttp.Call call = listPackingGroupItemsValidateBeforeCall(inboundPlanId, packingGroupId, pageSize, paginationToken, null, null);
          Type localVarReturnType = new TypeToken<ListPackingGroupItemsResponse>() {
          }.getType();
          return apiClient.execute(call, localVarReturnType);
      }
  
      /**
       * (asynchronously)
       * Retrieves a page of items in a given packing group. Packing options must first be generated by the corresponding operation before packing group items can be listed.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 30 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId   Identifier of an inbound plan. (required)
       * @param packingGroupId  Identifier of a packing group. (required)
       * @param pageSize        The number of packing group items to return in the response matching the given query. (optional, default to 10)
       * @param paginationToken A token to fetch a certain page when there are multiple pages worth of results. The value of this token is fetched from the &#x60;pagination&#x60; returned in the API response. In the absence of the token value from the query parameter the API returns the first page of the result. (optional)
       * @param callback        The callback to be executed when the API call finishes
       * @return The request call
       * @throws ApiException If fail to process the API call, e.g. serializing the request body object
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public com.squareup.okhttp.Call listPackingGroupItemsAsync(String inboundPlanId, String packingGroupId, Integer pageSize, String paginationToken, final ApiCallback<ListPackingGroupItemsResponse> callback) throws ApiException, LWAException {
  
          ProgressResponseBody.ProgressListener progressListener = null;
          ProgressRequestBody.ProgressRequestListener progressRequestListener = null;
  
          if (callback != null) {
              progressListener = new ProgressResponseBody.ProgressListener() {
                  @Override
                  public void update(long bytesRead, long contentLength, boolean done) {
                      callback.onDownloadProgress(bytesRead, contentLength, done);
                  }
              };
  
              progressRequestListener = new ProgressRequestBody.ProgressRequestListener() {
                  @Override
                  public void onRequestProgress(long bytesWritten, long contentLength, boolean done) {
                      callback.onUploadProgress(bytesWritten, contentLength, done);
                  }
              };
          }
  
          com.squareup.okhttp.Call call = listPackingGroupItemsValidateBeforeCall(inboundPlanId, packingGroupId, pageSize, paginationToken, progressListener, progressRequestListener);
          Type localVarReturnType = new TypeToken<ListPackingGroupItemsResponse>() {
          }.getType();
          apiClient.executeAsync(call, localVarReturnType, callback);
          return call;
      }
  
      /**
       * Build call for listPackingOptions
       *
       * @param inboundPlanId           Identifier of an inbound plan. (required)
       * @param pageSize                The number of packing options to return in the response matching the given query. (optional, default to 10)
       * @param paginationToken         A token to fetch a certain page when there are multiple pages worth of results. The value of this token is fetched from the &#x60;pagination&#x60; returned in the API response. In the absence of the token value from the query parameter the API returns the first page of the result. (optional)
       * @param progressListener        Progress listener
       * @param progressRequestListener Progress request listener
       * @return Call to execute
       * @throws ApiException If fail to serialize the request body object
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public com.squareup.okhttp.Call listPackingOptionsCall(String inboundPlanId, Integer pageSize, String paginationToken, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException, LWAException {
          Object localVarPostBody = null;
  
          // create path and map variables
          String localVarPath = "/inbound/fba/2024-03-20/inboundPlans/{inboundPlanId}/packingOptions"
                  .replaceAll("\\{" + "inboundPlanId" + "\\}", apiClient.escapeString(inboundPlanId));
  
          List<Pair> localVarQueryParams = new ArrayList<Pair>();
          List<Pair> localVarCollectionQueryParams = new ArrayList<Pair>();
          if (pageSize != null)
              localVarQueryParams.addAll(apiClient.parameterToPair("pageSize", pageSize));
          if (paginationToken != null)
              localVarQueryParams.addAll(apiClient.parameterToPair("paginationToken", paginationToken));
  
          Map<String, String> localVarHeaderParams = new HashMap<String, String>();
  
          Map<String, Object> localVarFormParams = new HashMap<String, Object>();
  
          final String[] localVarAccepts = {
                  "application/json"
          };
          final String localVarAccept = apiClient.selectHeaderAccept(localVarAccepts);
          if (localVarAccept != null) localVarHeaderParams.put("Accept", localVarAccept);
  
          final String[] localVarContentTypes = {
                  "application/json"
          };
          final String localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes);
          localVarHeaderParams.put("Content-Type", localVarContentType);
  
          if (progressListener != null) {
              apiClient.getHttpClient().networkInterceptors().add(new com.squareup.okhttp.Interceptor() {
                  @Override
                  public com.squareup.okhttp.Response intercept(com.squareup.okhttp.Interceptor.Chain chain) throws IOException {
                      com.squareup.okhttp.Response originalResponse = chain.proceed(chain.request());
                      return originalResponse.newBuilder()
                              .body(new ProgressResponseBody(originalResponse.body(), progressListener))
                              .build();
                  }
              });
          }
  
          String[] localVarAuthNames = new String[]{};
          return apiClient.buildCall(localVarPath, "GET", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarFormParams, localVarAuthNames, progressRequestListener);
      }
  
      @SuppressWarnings("rawtypes")
      private com.squareup.okhttp.Call listPackingOptionsValidateBeforeCall(String inboundPlanId, Integer pageSize, String paginationToken, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException, LWAException {
  
          // verify the required parameter 'inboundPlanId' is set
          if (inboundPlanId == null) {
              throw new ApiException("Missing the required parameter 'inboundPlanId' when calling listPackingOptions(Async)");
          }
  
  
          com.squareup.okhttp.Call call = listPackingOptionsCall(inboundPlanId, pageSize, paginationToken, progressListener, progressRequestListener);
          return call;
  
      }
  
      /**
       * Retrieves a list of all packing options for an inbound plan. Packing options must first be generated by the corresponding operation before becoming available.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 6 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId   Identifier of an inbound plan. (required)
       * @param pageSize        The number of packing options to return in the response matching the given query. (optional, default to 10)
       * @param paginationToken A token to fetch a certain page when there are multiple pages worth of results. The value of this token is fetched from the &#x60;pagination&#x60; returned in the API response. In the absence of the token value from the query parameter the API returns the first page of the result. (optional)
       * @return ListPackingOptionsResponse
       * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public ListPackingOptionsResponse listPackingOptions(String inboundPlanId, Integer pageSize, String paginationToken) throws ApiException, LWAException {
          ApiResponse<ListPackingOptionsResponse> resp = listPackingOptionsWithHttpInfo(inboundPlanId, pageSize, paginationToken);
          return resp.getData();
      }
  
      /**
       * Retrieves a list of all packing options for an inbound plan. Packing options must first be generated by the corresponding operation before becoming available.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 6 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId   Identifier of an inbound plan. (required)
       * @param pageSize        The number of packing options to return in the response matching the given query. (optional, default to 10)
       * @param paginationToken A token to fetch a certain page when there are multiple pages worth of results. The value of this token is fetched from the &#x60;pagination&#x60; returned in the API response. In the absence of the token value from the query parameter the API returns the first page of the result. (optional)
       * @return ApiResponse&lt;ListPackingOptionsResponse&gt;
       * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public ApiResponse<ListPackingOptionsResponse> listPackingOptionsWithHttpInfo(String inboundPlanId, Integer pageSize, String paginationToken) throws ApiException, LWAException {
          com.squareup.okhttp.Call call = listPackingOptionsValidateBeforeCall(inboundPlanId, pageSize, paginationToken, null, null);
          Type localVarReturnType = new TypeToken<ListPackingOptionsResponse>() {
          }.getType();
          return apiClient.execute(call, localVarReturnType);
      }
  
      /**
       * (asynchronously)
       * Retrieves a list of all packing options for an inbound plan. Packing options must first be generated by the corresponding operation before becoming available.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 6 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId   Identifier of an inbound plan. (required)
       * @param pageSize        The number of packing options to return in the response matching the given query. (optional, default to 10)
       * @param paginationToken A token to fetch a certain page when there are multiple pages worth of results. The value of this token is fetched from the &#x60;pagination&#x60; returned in the API response. In the absence of the token value from the query parameter the API returns the first page of the result. (optional)
       * @param callback        The callback to be executed when the API call finishes
       * @return The request call
       * @throws ApiException If fail to process the API call, e.g. serializing the request body object
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public com.squareup.okhttp.Call listPackingOptionsAsync(String inboundPlanId, Integer pageSize, String paginationToken, final ApiCallback<ListPackingOptionsResponse> callback) throws ApiException, LWAException {
  
          ProgressResponseBody.ProgressListener progressListener = null;
          ProgressRequestBody.ProgressRequestListener progressRequestListener = null;
  
          if (callback != null) {
              progressListener = new ProgressResponseBody.ProgressListener() {
                  @Override
                  public void update(long bytesRead, long contentLength, boolean done) {
                      callback.onDownloadProgress(bytesRead, contentLength, done);
                  }
              };
  
              progressRequestListener = new ProgressRequestBody.ProgressRequestListener() {
                  @Override
                  public void onRequestProgress(long bytesWritten, long contentLength, boolean done) {
                      callback.onUploadProgress(bytesWritten, contentLength, done);
                  }
              };
          }
  
          com.squareup.okhttp.Call call = listPackingOptionsValidateBeforeCall(inboundPlanId, pageSize, paginationToken, progressListener, progressRequestListener);
          Type localVarReturnType = new TypeToken<ListPackingOptionsResponse>() {
          }.getType();
          apiClient.executeAsync(call, localVarReturnType, callback);
          return call;
      }
  
      /**
       * Build call for listPlacementOptions
       *
       * @param inboundPlanId           Identifier of an inbound plan. (required)
       * @param pageSize                The number of placement options to return in the response matching the given query. (optional, default to 10)
       * @param paginationToken         A token to fetch a certain page when there are multiple pages worth of results. The value of this token is fetched from the &#x60;pagination&#x60; returned in the API response. In the absence of the token value from the query parameter the API returns the first page of the result. (optional)
       * @param progressListener        Progress listener
       * @param progressRequestListener Progress request listener
       * @return Call to execute
       * @throws ApiException If fail to serialize the request body object
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public com.squareup.okhttp.Call listPlacementOptionsCall(String inboundPlanId, Integer pageSize, String paginationToken, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException, LWAException {
          Object localVarPostBody = null;
  
          // create path and map variables
          String localVarPath = "/inbound/fba/2024-03-20/inboundPlans/{inboundPlanId}/placementOptions"
                  .replaceAll("\\{" + "inboundPlanId" + "\\}", apiClient.escapeString(inboundPlanId));
  
          List<Pair> localVarQueryParams = new ArrayList<Pair>();
          List<Pair> localVarCollectionQueryParams = new ArrayList<Pair>();
          if (pageSize != null)
              localVarQueryParams.addAll(apiClient.parameterToPair("pageSize", pageSize));
          if (paginationToken != null)
              localVarQueryParams.addAll(apiClient.parameterToPair("paginationToken", paginationToken));
  
          Map<String, String> localVarHeaderParams = new HashMap<String, String>();
  
          Map<String, Object> localVarFormParams = new HashMap<String, Object>();
  
          final String[] localVarAccepts = {
                  "application/json"
          };
          final String localVarAccept = apiClient.selectHeaderAccept(localVarAccepts);
          if (localVarAccept != null) localVarHeaderParams.put("Accept", localVarAccept);
  
          final String[] localVarContentTypes = {
                  "application/json"
          };
          final String localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes);
          localVarHeaderParams.put("Content-Type", localVarContentType);
  
          if (progressListener != null) {
              apiClient.getHttpClient().networkInterceptors().add(new com.squareup.okhttp.Interceptor() {
                  @Override
                  public com.squareup.okhttp.Response intercept(com.squareup.okhttp.Interceptor.Chain chain) throws IOException {
                      com.squareup.okhttp.Response originalResponse = chain.proceed(chain.request());
                      return originalResponse.newBuilder()
                              .body(new ProgressResponseBody(originalResponse.body(), progressListener))
                              .build();
                  }
              });
          }
  
          String[] localVarAuthNames = new String[]{};
          return apiClient.buildCall(localVarPath, "GET", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarFormParams, localVarAuthNames, progressRequestListener);
      }
  
      @SuppressWarnings("rawtypes")
      private com.squareup.okhttp.Call listPlacementOptionsValidateBeforeCall(String inboundPlanId, Integer pageSize, String paginationToken, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException, LWAException {
  
          // verify the required parameter 'inboundPlanId' is set
          if (inboundPlanId == null) {
              throw new ApiException("Missing the required parameter 'inboundPlanId' when calling listPlacementOptions(Async)");
          }
  
  
          com.squareup.okhttp.Call call = listPlacementOptionsCall(inboundPlanId, pageSize, paginationToken, progressListener, progressRequestListener);
          return call;
  
      }
  
      /**
       * Provides a list of all placement options for an inbound plan. Placement options must first be generated by the corresponding operation before becoming available.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 6 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId   Identifier of an inbound plan. (required)
       * @param pageSize        The number of placement options to return in the response matching the given query. (optional, default to 10)
       * @param paginationToken A token to fetch a certain page when there are multiple pages worth of results. The value of this token is fetched from the &#x60;pagination&#x60; returned in the API response. In the absence of the token value from the query parameter the API returns the first page of the result. (optional)
       * @return ListPlacementOptionsResponse
       * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public ListPlacementOptionsResponse listPlacementOptions(String inboundPlanId, Integer pageSize, String paginationToken) throws ApiException, LWAException {
          ApiResponse<ListPlacementOptionsResponse> resp = listPlacementOptionsWithHttpInfo(inboundPlanId, pageSize, paginationToken);
          return resp.getData();
      }
  
      /**
       * Provides a list of all placement options for an inbound plan. Placement options must first be generated by the corresponding operation before becoming available.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 6 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId   Identifier of an inbound plan. (required)
       * @param pageSize        The number of placement options to return in the response matching the given query. (optional, default to 10)
       * @param paginationToken A token to fetch a certain page when there are multiple pages worth of results. The value of this token is fetched from the &#x60;pagination&#x60; returned in the API response. In the absence of the token value from the query parameter the API returns the first page of the result. (optional)
       * @return ApiResponse&lt;ListPlacementOptionsResponse&gt;
       * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public ApiResponse<ListPlacementOptionsResponse> listPlacementOptionsWithHttpInfo(String inboundPlanId, Integer pageSize, String paginationToken) throws ApiException, LWAException {
          com.squareup.okhttp.Call call = listPlacementOptionsValidateBeforeCall(inboundPlanId, pageSize, paginationToken, null, null);
          Type localVarReturnType = new TypeToken<ListPlacementOptionsResponse>() {
          }.getType();
          return apiClient.execute(call, localVarReturnType);
      }
  
      /**
       * (asynchronously)
       * Provides a list of all placement options for an inbound plan. Placement options must first be generated by the corresponding operation before becoming available.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 6 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId   Identifier of an inbound plan. (required)
       * @param pageSize        The number of placement options to return in the response matching the given query. (optional, default to 10)
       * @param paginationToken A token to fetch a certain page when there are multiple pages worth of results. The value of this token is fetched from the &#x60;pagination&#x60; returned in the API response. In the absence of the token value from the query parameter the API returns the first page of the result. (optional)
       * @param callback        The callback to be executed when the API call finishes
       * @return The request call
       * @throws ApiException If fail to process the API call, e.g. serializing the request body object
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public com.squareup.okhttp.Call listPlacementOptionsAsync(String inboundPlanId, Integer pageSize, String paginationToken, final ApiCallback<ListPlacementOptionsResponse> callback) throws ApiException, LWAException {
  
          ProgressResponseBody.ProgressListener progressListener = null;
          ProgressRequestBody.ProgressRequestListener progressRequestListener = null;
  
          if (callback != null) {
              progressListener = new ProgressResponseBody.ProgressListener() {
                  @Override
                  public void update(long bytesRead, long contentLength, boolean done) {
                      callback.onDownloadProgress(bytesRead, contentLength, done);
                  }
              };
  
              progressRequestListener = new ProgressRequestBody.ProgressRequestListener() {
                  @Override
                  public void onRequestProgress(long bytesWritten, long contentLength, boolean done) {
                      callback.onUploadProgress(bytesWritten, contentLength, done);
                  }
              };
          }
  
          com.squareup.okhttp.Call call = listPlacementOptionsValidateBeforeCall(inboundPlanId, pageSize, paginationToken, progressListener, progressRequestListener);
          Type localVarReturnType = new TypeToken<ListPlacementOptionsResponse>() {
          }.getType();
          apiClient.executeAsync(call, localVarReturnType, callback);
          return call;
      }
  
      /**
       * Build call for listShipmentBoxes
       *
       * @param inboundPlanId           Identifier of an inbound plan. (required)
       * @param shipmentId              Identifier of a shipment. A shipment contains the boxes and units being inbounded. (required)
       * @param pageSize                The number of boxes to return in the response matching the given query. (optional, default to 10)
       * @param paginationToken         A token to fetch a certain page when there are multiple pages worth of results. The value of this token is fetched from the &#x60;pagination&#x60; returned in the API response. In the absence of the token value from the query parameter the API returns the first page of the result. (optional)
       * @param progressListener        Progress listener
       * @param progressRequestListener Progress request listener
       * @return Call to execute
       * @throws ApiException If fail to serialize the request body object
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public com.squareup.okhttp.Call listShipmentBoxesCall(String inboundPlanId, String shipmentId, Integer pageSize, String paginationToken, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException, LWAException {
          Object localVarPostBody = null;
  
          // create path and map variables
          String localVarPath = "/inbound/fba/2024-03-20/inboundPlans/{inboundPlanId}/shipments/{shipmentId}/boxes"
                  .replaceAll("\\{" + "inboundPlanId" + "\\}", apiClient.escapeString(inboundPlanId))
                  .replaceAll("\\{" + "shipmentId" + "\\}", apiClient.escapeString(shipmentId));
  
          List<Pair> localVarQueryParams = new ArrayList<Pair>();
          List<Pair> localVarCollectionQueryParams = new ArrayList<Pair>();
          if (pageSize != null)
              localVarQueryParams.addAll(apiClient.parameterToPair("pageSize", pageSize));
          if (paginationToken != null)
              localVarQueryParams.addAll(apiClient.parameterToPair("paginationToken", paginationToken));
  
          Map<String, String> localVarHeaderParams = new HashMap<String, String>();
  
          Map<String, Object> localVarFormParams = new HashMap<String, Object>();
  
          final String[] localVarAccepts = {
                  "application/json"
          };
          final String localVarAccept = apiClient.selectHeaderAccept(localVarAccepts);
          if (localVarAccept != null) localVarHeaderParams.put("Accept", localVarAccept);
  
          final String[] localVarContentTypes = {
                  "application/json"
          };
          final String localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes);
          localVarHeaderParams.put("Content-Type", localVarContentType);
  
          if (progressListener != null) {
              apiClient.getHttpClient().networkInterceptors().add(new com.squareup.okhttp.Interceptor() {
                  @Override
                  public com.squareup.okhttp.Response intercept(com.squareup.okhttp.Interceptor.Chain chain) throws IOException {
                      com.squareup.okhttp.Response originalResponse = chain.proceed(chain.request());
                      return originalResponse.newBuilder()
                              .body(new ProgressResponseBody(originalResponse.body(), progressListener))
                              .build();
                  }
              });
          }
  
          String[] localVarAuthNames = new String[]{};
          return apiClient.buildCall(localVarPath, "GET", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarFormParams, localVarAuthNames, progressRequestListener);
      }
  
      @SuppressWarnings("rawtypes")
      private com.squareup.okhttp.Call listShipmentBoxesValidateBeforeCall(String inboundPlanId, String shipmentId, Integer pageSize, String paginationToken, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException, LWAException {
  
          // verify the required parameter 'inboundPlanId' is set
          if (inboundPlanId == null) {
              throw new ApiException("Missing the required parameter 'inboundPlanId' when calling listShipmentBoxes(Async)");
          }
  
          // verify the required parameter 'shipmentId' is set
          if (shipmentId == null) {
              throw new ApiException("Missing the required parameter 'shipmentId' when calling listShipmentBoxes(Async)");
          }
  
  
          com.squareup.okhttp.Call call = listShipmentBoxesCall(inboundPlanId, shipmentId, pageSize, paginationToken, progressListener, progressRequestListener);
          return call;
  
      }
  
      /**
       * Provides a paginated list of box packages in a shipment.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 30 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId   Identifier of an inbound plan. (required)
       * @param shipmentId      Identifier of a shipment. A shipment contains the boxes and units being inbounded. (required)
       * @param pageSize        The number of boxes to return in the response matching the given query. (optional, default to 10)
       * @param paginationToken A token to fetch a certain page when there are multiple pages worth of results. The value of this token is fetched from the &#x60;pagination&#x60; returned in the API response. In the absence of the token value from the query parameter the API returns the first page of the result. (optional)
       * @return ListShipmentBoxesResponse
       * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public ListShipmentBoxesResponse listShipmentBoxes(String inboundPlanId, String shipmentId, Integer pageSize, String paginationToken) throws ApiException, LWAException {
          ApiResponse<ListShipmentBoxesResponse> resp = listShipmentBoxesWithHttpInfo(inboundPlanId, shipmentId, pageSize, paginationToken);
          return resp.getData();
      }
  
      /**
       * Provides a paginated list of box packages in a shipment.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 30 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId   Identifier of an inbound plan. (required)
       * @param shipmentId      Identifier of a shipment. A shipment contains the boxes and units being inbounded. (required)
       * @param pageSize        The number of boxes to return in the response matching the given query. (optional, default to 10)
       * @param paginationToken A token to fetch a certain page when there are multiple pages worth of results. The value of this token is fetched from the &#x60;pagination&#x60; returned in the API response. In the absence of the token value from the query parameter the API returns the first page of the result. (optional)
       * @return ApiResponse&lt;ListShipmentBoxesResponse&gt;
       * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public ApiResponse<ListShipmentBoxesResponse> listShipmentBoxesWithHttpInfo(String inboundPlanId, String shipmentId, Integer pageSize, String paginationToken) throws ApiException, LWAException {
          com.squareup.okhttp.Call call = listShipmentBoxesValidateBeforeCall(inboundPlanId, shipmentId, pageSize, paginationToken, null, null);
          Type localVarReturnType = new TypeToken<ListShipmentBoxesResponse>() {
          }.getType();
          return apiClient.execute(call, localVarReturnType);
      }
  
      /**
       * (asynchronously)
       * Provides a paginated list of box packages in a shipment.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 30 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId   Identifier of an inbound plan. (required)
       * @param shipmentId      Identifier of a shipment. A shipment contains the boxes and units being inbounded. (required)
       * @param pageSize        The number of boxes to return in the response matching the given query. (optional, default to 10)
       * @param paginationToken A token to fetch a certain page when there are multiple pages worth of results. The value of this token is fetched from the &#x60;pagination&#x60; returned in the API response. In the absence of the token value from the query parameter the API returns the first page of the result. (optional)
       * @param callback        The callback to be executed when the API call finishes
       * @return The request call
       * @throws ApiException If fail to process the API call, e.g. serializing the request body object
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public com.squareup.okhttp.Call listShipmentBoxesAsync(String inboundPlanId, String shipmentId, Integer pageSize, String paginationToken, final ApiCallback<ListShipmentBoxesResponse> callback) throws ApiException, LWAException {
  
          ProgressResponseBody.ProgressListener progressListener = null;
          ProgressRequestBody.ProgressRequestListener progressRequestListener = null;
  
          if (callback != null) {
              progressListener = new ProgressResponseBody.ProgressListener() {
                  @Override
                  public void update(long bytesRead, long contentLength, boolean done) {
                      callback.onDownloadProgress(bytesRead, contentLength, done);
                  }
              };
  
              progressRequestListener = new ProgressRequestBody.ProgressRequestListener() {
                  @Override
                  public void onRequestProgress(long bytesWritten, long contentLength, boolean done) {
                      callback.onUploadProgress(bytesWritten, contentLength, done);
                  }
              };
          }
  
          com.squareup.okhttp.Call call = listShipmentBoxesValidateBeforeCall(inboundPlanId, shipmentId, pageSize, paginationToken, progressListener, progressRequestListener);
          Type localVarReturnType = new TypeToken<ListShipmentBoxesResponse>() {
          }.getType();
          apiClient.executeAsync(call, localVarReturnType, callback);
          return call;
      }
  
      /**
       * Build call for listShipmentContentUpdatePreviews
       *
       * @param inboundPlanId           Identifier of an inbound plan. (required)
       * @param shipmentId              Identifier of a shipment. A shipment contains the boxes and units being inbounded. (required)
       * @param pageSize                The number of content update previews to return. (optional, default to 10)
       * @param paginationToken         A token to fetch a certain page when there are multiple pages worth of results. The value of this token is fetched from the &#x60;pagination&#x60; returned in the API response. In the absence of the token value from the query parameter the API returns the first page of the result. (optional)
       * @param progressListener        Progress listener
       * @param progressRequestListener Progress request listener
       * @return Call to execute
       * @throws ApiException If fail to serialize the request body object
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public com.squareup.okhttp.Call listShipmentContentUpdatePreviewsCall(String inboundPlanId, String shipmentId, Integer pageSize, String paginationToken, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException, LWAException {
          Object localVarPostBody = null;
  
          // create path and map variables
          String localVarPath = "/inbound/fba/2024-03-20/inboundPlans/{inboundPlanId}/shipments/{shipmentId}/contentUpdatePreviews"
                  .replaceAll("\\{" + "inboundPlanId" + "\\}", apiClient.escapeString(inboundPlanId))
                  .replaceAll("\\{" + "shipmentId" + "\\}", apiClient.escapeString(shipmentId));
  
          List<Pair> localVarQueryParams = new ArrayList<Pair>();
          List<Pair> localVarCollectionQueryParams = new ArrayList<Pair>();
          if (pageSize != null)
              localVarQueryParams.addAll(apiClient.parameterToPair("pageSize", pageSize));
          if (paginationToken != null)
              localVarQueryParams.addAll(apiClient.parameterToPair("paginationToken", paginationToken));
  
          Map<String, String> localVarHeaderParams = new HashMap<String, String>();
  
          Map<String, Object> localVarFormParams = new HashMap<String, Object>();
  
          final String[] localVarAccepts = {
                  "application/json"
          };
          final String localVarAccept = apiClient.selectHeaderAccept(localVarAccepts);
          if (localVarAccept != null) localVarHeaderParams.put("Accept", localVarAccept);
  
          final String[] localVarContentTypes = {
                  "application/json"
          };
          final String localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes);
          localVarHeaderParams.put("Content-Type", localVarContentType);
  
          if (progressListener != null) {
              apiClient.getHttpClient().networkInterceptors().add(new com.squareup.okhttp.Interceptor() {
                  @Override
                  public com.squareup.okhttp.Response intercept(com.squareup.okhttp.Interceptor.Chain chain) throws IOException {
                      com.squareup.okhttp.Response originalResponse = chain.proceed(chain.request());
                      return originalResponse.newBuilder()
                              .body(new ProgressResponseBody(originalResponse.body(), progressListener))
                              .build();
                  }
              });
          }
  
          String[] localVarAuthNames = new String[]{};
          return apiClient.buildCall(localVarPath, "GET", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarFormParams, localVarAuthNames, progressRequestListener);
      }
  
      @SuppressWarnings("rawtypes")
      private com.squareup.okhttp.Call listShipmentContentUpdatePreviewsValidateBeforeCall(String inboundPlanId, String shipmentId, Integer pageSize, String paginationToken, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException, LWAException {
  
          // verify the required parameter 'inboundPlanId' is set
          if (inboundPlanId == null) {
              throw new ApiException("Missing the required parameter 'inboundPlanId' when calling listShipmentContentUpdatePreviews(Async)");
          }
  
          // verify the required parameter 'shipmentId' is set
          if (shipmentId == null) {
              throw new ApiException("Missing the required parameter 'shipmentId' when calling listShipmentContentUpdatePreviews(Async)");
          }
  
  
          com.squareup.okhttp.Call call = listShipmentContentUpdatePreviewsCall(inboundPlanId, shipmentId, pageSize, paginationToken, progressListener, progressRequestListener);
          return call;
  
      }
  
      /**
       * Retrieve a paginated list of shipment content update previews for a given shipment. The shipment content update preview is a summary of the requested shipment content changes along with the transportation cost implications of the change that can only be confirmed prior to the expiry date specified.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 30 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId   Identifier of an inbound plan. (required)
       * @param shipmentId      Identifier of a shipment. A shipment contains the boxes and units being inbounded. (required)
       * @param pageSize        The number of content update previews to return. (optional, default to 10)
       * @param paginationToken A token to fetch a certain page when there are multiple pages worth of results. The value of this token is fetched from the &#x60;pagination&#x60; returned in the API response. In the absence of the token value from the query parameter the API returns the first page of the result. (optional)
       * @return ListShipmentContentUpdatePreviewsResponse
       * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public ListShipmentContentUpdatePreviewsResponse listShipmentContentUpdatePreviews(String inboundPlanId, String shipmentId, Integer pageSize, String paginationToken) throws ApiException, LWAException {
          ApiResponse<ListShipmentContentUpdatePreviewsResponse> resp = listShipmentContentUpdatePreviewsWithHttpInfo(inboundPlanId, shipmentId, pageSize, paginationToken);
          return resp.getData();
      }
  
      /**
       * Retrieve a paginated list of shipment content update previews for a given shipment. The shipment content update preview is a summary of the requested shipment content changes along with the transportation cost implications of the change that can only be confirmed prior to the expiry date specified.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 30 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId   Identifier of an inbound plan. (required)
       * @param shipmentId      Identifier of a shipment. A shipment contains the boxes and units being inbounded. (required)
       * @param pageSize        The number of content update previews to return. (optional, default to 10)
       * @param paginationToken A token to fetch a certain page when there are multiple pages worth of results. The value of this token is fetched from the &#x60;pagination&#x60; returned in the API response. In the absence of the token value from the query parameter the API returns the first page of the result. (optional)
       * @return ApiResponse&lt;ListShipmentContentUpdatePreviewsResponse&gt;
       * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public ApiResponse<ListShipmentContentUpdatePreviewsResponse> listShipmentContentUpdatePreviewsWithHttpInfo(String inboundPlanId, String shipmentId, Integer pageSize, String paginationToken) throws ApiException, LWAException {
          com.squareup.okhttp.Call call = listShipmentContentUpdatePreviewsValidateBeforeCall(inboundPlanId, shipmentId, pageSize, paginationToken, null, null);
          Type localVarReturnType = new TypeToken<ListShipmentContentUpdatePreviewsResponse>() {
          }.getType();
          return apiClient.execute(call, localVarReturnType);
      }
  
      /**
       * (asynchronously)
       * Retrieve a paginated list of shipment content update previews for a given shipment. The shipment content update preview is a summary of the requested shipment content changes along with the transportation cost implications of the change that can only be confirmed prior to the expiry date specified.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 30 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId   Identifier of an inbound plan. (required)
       * @param shipmentId      Identifier of a shipment. A shipment contains the boxes and units being inbounded. (required)
       * @param pageSize        The number of content update previews to return. (optional, default to 10)
       * @param paginationToken A token to fetch a certain page when there are multiple pages worth of results. The value of this token is fetched from the &#x60;pagination&#x60; returned in the API response. In the absence of the token value from the query parameter the API returns the first page of the result. (optional)
       * @param callback        The callback to be executed when the API call finishes
       * @return The request call
       * @throws ApiException If fail to process the API call, e.g. serializing the request body object
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public com.squareup.okhttp.Call listShipmentContentUpdatePreviewsAsync(String inboundPlanId, String shipmentId, Integer pageSize, String paginationToken, final ApiCallback<ListShipmentContentUpdatePreviewsResponse> callback) throws ApiException, LWAException {
  
          ProgressResponseBody.ProgressListener progressListener = null;
          ProgressRequestBody.ProgressRequestListener progressRequestListener = null;
  
          if (callback != null) {
              progressListener = new ProgressResponseBody.ProgressListener() {
                  @Override
                  public void update(long bytesRead, long contentLength, boolean done) {
                      callback.onDownloadProgress(bytesRead, contentLength, done);
                  }
              };
  
              progressRequestListener = new ProgressRequestBody.ProgressRequestListener() {
                  @Override
                  public void onRequestProgress(long bytesWritten, long contentLength, boolean done) {
                      callback.onUploadProgress(bytesWritten, contentLength, done);
                  }
              };
          }
  
          com.squareup.okhttp.Call call = listShipmentContentUpdatePreviewsValidateBeforeCall(inboundPlanId, shipmentId, pageSize, paginationToken, progressListener, progressRequestListener);
          Type localVarReturnType = new TypeToken<ListShipmentContentUpdatePreviewsResponse>() {
          }.getType();
          apiClient.executeAsync(call, localVarReturnType, callback);
          return call;
      }
  
      /**
       * Build call for listShipmentItems
       *
       * @param inboundPlanId           Identifier of an inbound plan. (required)
       * @param shipmentId              Identifier of a shipment. A shipment contains the boxes and units being inbounded. (required)
       * @param pageSize                The number of items to return in the response matching the given query. (optional, default to 10)
       * @param paginationToken         A token to fetch a certain page when there are multiple pages worth of results. The value of this token is fetched from the &#x60;pagination&#x60; returned in the API response. In the absence of the token value from the query parameter the API returns the first page of the result. (optional)
       * @param progressListener        Progress listener
       * @param progressRequestListener Progress request listener
       * @return Call to execute
       * @throws ApiException If fail to serialize the request body object
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public com.squareup.okhttp.Call listShipmentItemsCall(String inboundPlanId, String shipmentId, Integer pageSize, String paginationToken, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException, LWAException {
          Object localVarPostBody = null;
  
          // create path and map variables
          String localVarPath = "/inbound/fba/2024-03-20/inboundPlans/{inboundPlanId}/shipments/{shipmentId}/items"
                  .replaceAll("\\{" + "inboundPlanId" + "\\}", apiClient.escapeString(inboundPlanId))
                  .replaceAll("\\{" + "shipmentId" + "\\}", apiClient.escapeString(shipmentId));
  
          List<Pair> localVarQueryParams = new ArrayList<Pair>();
          List<Pair> localVarCollectionQueryParams = new ArrayList<Pair>();
          if (pageSize != null)
              localVarQueryParams.addAll(apiClient.parameterToPair("pageSize", pageSize));
          if (paginationToken != null)
              localVarQueryParams.addAll(apiClient.parameterToPair("paginationToken", paginationToken));
  
          Map<String, String> localVarHeaderParams = new HashMap<String, String>();
  
          Map<String, Object> localVarFormParams = new HashMap<String, Object>();
  
          final String[] localVarAccepts = {
                  "application/json"
          };
          final String localVarAccept = apiClient.selectHeaderAccept(localVarAccepts);
          if (localVarAccept != null) localVarHeaderParams.put("Accept", localVarAccept);
  
          final String[] localVarContentTypes = {
                  "application/json"
          };
          final String localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes);
          localVarHeaderParams.put("Content-Type", localVarContentType);
  
          if (progressListener != null) {
              apiClient.getHttpClient().networkInterceptors().add(new com.squareup.okhttp.Interceptor() {
                  @Override
                  public com.squareup.okhttp.Response intercept(com.squareup.okhttp.Interceptor.Chain chain) throws IOException {
                      com.squareup.okhttp.Response originalResponse = chain.proceed(chain.request());
                      return originalResponse.newBuilder()
                              .body(new ProgressResponseBody(originalResponse.body(), progressListener))
                              .build();
                  }
              });
          }
  
          String[] localVarAuthNames = new String[]{};
          return apiClient.buildCall(localVarPath, "GET", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarFormParams, localVarAuthNames, progressRequestListener);
      }
  
      @SuppressWarnings("rawtypes")
      private com.squareup.okhttp.Call listShipmentItemsValidateBeforeCall(String inboundPlanId, String shipmentId, Integer pageSize, String paginationToken, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException, LWAException {
  
          // verify the required parameter 'inboundPlanId' is set
          if (inboundPlanId == null) {
              throw new ApiException("Missing the required parameter 'inboundPlanId' when calling listShipmentItems(Async)");
          }
  
          // verify the required parameter 'shipmentId' is set
          if (shipmentId == null) {
              throw new ApiException("Missing the required parameter 'shipmentId' when calling listShipmentItems(Async)");
          }
  
  
          com.squareup.okhttp.Call call = listShipmentItemsCall(inboundPlanId, shipmentId, pageSize, paginationToken, progressListener, progressRequestListener);
          return call;
  
      }
  
      /**
       * Provides a paginated list of item packages in a shipment.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 30 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId   Identifier of an inbound plan. (required)
       * @param shipmentId      Identifier of a shipment. A shipment contains the boxes and units being inbounded. (required)
       * @param pageSize        The number of items to return in the response matching the given query. (optional, default to 10)
       * @param paginationToken A token to fetch a certain page when there are multiple pages worth of results. The value of this token is fetched from the &#x60;pagination&#x60; returned in the API response. In the absence of the token value from the query parameter the API returns the first page of the result. (optional)
       * @return ListShipmentItemsResponse
       * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public ListShipmentItemsResponse listShipmentItems(String inboundPlanId, String shipmentId, Integer pageSize, String paginationToken) throws ApiException, LWAException {
          ApiResponse<ListShipmentItemsResponse> resp = listShipmentItemsWithHttpInfo(inboundPlanId, shipmentId, pageSize, paginationToken);
          return resp.getData();
      }
  
      /**
       * Provides a paginated list of item packages in a shipment.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 30 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId   Identifier of an inbound plan. (required)
       * @param shipmentId      Identifier of a shipment. A shipment contains the boxes and units being inbounded. (required)
       * @param pageSize        The number of items to return in the response matching the given query. (optional, default to 10)
       * @param paginationToken A token to fetch a certain page when there are multiple pages worth of results. The value of this token is fetched from the &#x60;pagination&#x60; returned in the API response. In the absence of the token value from the query parameter the API returns the first page of the result. (optional)
       * @return ApiResponse&lt;ListShipmentItemsResponse&gt;
       * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public ApiResponse<ListShipmentItemsResponse> listShipmentItemsWithHttpInfo(String inboundPlanId, String shipmentId, Integer pageSize, String paginationToken) throws ApiException, LWAException {
          com.squareup.okhttp.Call call = listShipmentItemsValidateBeforeCall(inboundPlanId, shipmentId, pageSize, paginationToken, null, null);
          Type localVarReturnType = new TypeToken<ListShipmentItemsResponse>() {
          }.getType();
          return apiClient.execute(call, localVarReturnType);
      }
  
      /**
       * (asynchronously)
       * Provides a paginated list of item packages in a shipment.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 30 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId   Identifier of an inbound plan. (required)
       * @param shipmentId      Identifier of a shipment. A shipment contains the boxes and units being inbounded. (required)
       * @param pageSize        The number of items to return in the response matching the given query. (optional, default to 10)
       * @param paginationToken A token to fetch a certain page when there are multiple pages worth of results. The value of this token is fetched from the &#x60;pagination&#x60; returned in the API response. In the absence of the token value from the query parameter the API returns the first page of the result. (optional)
       * @param callback        The callback to be executed when the API call finishes
       * @return The request call
       * @throws ApiException If fail to process the API call, e.g. serializing the request body object
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public com.squareup.okhttp.Call listShipmentItemsAsync(String inboundPlanId, String shipmentId, Integer pageSize, String paginationToken, final ApiCallback<ListShipmentItemsResponse> callback) throws ApiException, LWAException {
  
          ProgressResponseBody.ProgressListener progressListener = null;
          ProgressRequestBody.ProgressRequestListener progressRequestListener = null;
  
          if (callback != null) {
              progressListener = new ProgressResponseBody.ProgressListener() {
                  @Override
                  public void update(long bytesRead, long contentLength, boolean done) {
                      callback.onDownloadProgress(bytesRead, contentLength, done);
                  }
              };
  
              progressRequestListener = new ProgressRequestBody.ProgressRequestListener() {
                  @Override
                  public void onRequestProgress(long bytesWritten, long contentLength, boolean done) {
                      callback.onUploadProgress(bytesWritten, contentLength, done);
                  }
              };
          }
  
          com.squareup.okhttp.Call call = listShipmentItemsValidateBeforeCall(inboundPlanId, shipmentId, pageSize, paginationToken, progressListener, progressRequestListener);
          Type localVarReturnType = new TypeToken<ListShipmentItemsResponse>() {
          }.getType();
          apiClient.executeAsync(call, localVarReturnType, callback);
          return call;
      }
  
      /**
       * Build call for listShipmentPallets
       *
       * @param inboundPlanId           Identifier of an inbound plan. (required)
       * @param shipmentId              Identifier of a shipment. A shipment contains the boxes and units being inbounded. (required)
       * @param pageSize                The number of pallets to return in the response matching the given query. (optional, default to 10)
       * @param paginationToken         A token to fetch a certain page when there are multiple pages worth of results. The value of this token is fetched from the &#x60;pagination&#x60; returned in the API response. In the absence of the token value from the query parameter the API returns the first page of the result. (optional)
       * @param progressListener        Progress listener
       * @param progressRequestListener Progress request listener
       * @return Call to execute
       * @throws ApiException If fail to serialize the request body object
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public com.squareup.okhttp.Call listShipmentPalletsCall(String inboundPlanId, String shipmentId, Integer pageSize, String paginationToken, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException, LWAException {
          Object localVarPostBody = null;
  
          // create path and map variables
          String localVarPath = "/inbound/fba/2024-03-20/inboundPlans/{inboundPlanId}/shipments/{shipmentId}/pallets"
                  .replaceAll("\\{" + "inboundPlanId" + "\\}", apiClient.escapeString(inboundPlanId))
                  .replaceAll("\\{" + "shipmentId" + "\\}", apiClient.escapeString(shipmentId));
  
          List<Pair> localVarQueryParams = new ArrayList<Pair>();
          List<Pair> localVarCollectionQueryParams = new ArrayList<Pair>();
          if (pageSize != null)
              localVarQueryParams.addAll(apiClient.parameterToPair("pageSize", pageSize));
          if (paginationToken != null)
              localVarQueryParams.addAll(apiClient.parameterToPair("paginationToken", paginationToken));
  
          Map<String, String> localVarHeaderParams = new HashMap<String, String>();
  
          Map<String, Object> localVarFormParams = new HashMap<String, Object>();
  
          final String[] localVarAccepts = {
                  "application/json"
          };
          final String localVarAccept = apiClient.selectHeaderAccept(localVarAccepts);
          if (localVarAccept != null) localVarHeaderParams.put("Accept", localVarAccept);
  
          final String[] localVarContentTypes = {
                  "application/json"
          };
          final String localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes);
          localVarHeaderParams.put("Content-Type", localVarContentType);
  
          if (progressListener != null) {
              apiClient.getHttpClient().networkInterceptors().add(new com.squareup.okhttp.Interceptor() {
                  @Override
                  public com.squareup.okhttp.Response intercept(com.squareup.okhttp.Interceptor.Chain chain) throws IOException {
                      com.squareup.okhttp.Response originalResponse = chain.proceed(chain.request());
                      return originalResponse.newBuilder()
                              .body(new ProgressResponseBody(originalResponse.body(), progressListener))
                              .build();
                  }
              });
          }
  
          String[] localVarAuthNames = new String[]{};
          return apiClient.buildCall(localVarPath, "GET", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarFormParams, localVarAuthNames, progressRequestListener);
      }
  
      @SuppressWarnings("rawtypes")
      private com.squareup.okhttp.Call listShipmentPalletsValidateBeforeCall(String inboundPlanId, String shipmentId, Integer pageSize, String paginationToken, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException, LWAException {
  
          // verify the required parameter 'inboundPlanId' is set
          if (inboundPlanId == null) {
              throw new ApiException("Missing the required parameter 'inboundPlanId' when calling listShipmentPallets(Async)");
          }
  
          // verify the required parameter 'shipmentId' is set
          if (shipmentId == null) {
              throw new ApiException("Missing the required parameter 'shipmentId' when calling listShipmentPallets(Async)");
          }
  
  
          com.squareup.okhttp.Call call = listShipmentPalletsCall(inboundPlanId, shipmentId, pageSize, paginationToken, progressListener, progressRequestListener);
          return call;
  
      }
  
      /**
       * Provides a paginated list of pallet packages in a shipment. A palletized shipment will have pallets when the related details are provided after generating Less-Than-Truckload (LTL) carrier shipments.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 30 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId   Identifier of an inbound plan. (required)
       * @param shipmentId      Identifier of a shipment. A shipment contains the boxes and units being inbounded. (required)
       * @param pageSize        The number of pallets to return in the response matching the given query. (optional, default to 10)
       * @param paginationToken A token to fetch a certain page when there are multiple pages worth of results. The value of this token is fetched from the &#x60;pagination&#x60; returned in the API response. In the absence of the token value from the query parameter the API returns the first page of the result. (optional)
       * @return ListShipmentPalletsResponse
       * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public ListShipmentPalletsResponse listShipmentPallets(String inboundPlanId, String shipmentId, Integer pageSize, String paginationToken) throws ApiException, LWAException {
          ApiResponse<ListShipmentPalletsResponse> resp = listShipmentPalletsWithHttpInfo(inboundPlanId, shipmentId, pageSize, paginationToken);
          return resp.getData();
      }
  
      /**
       * Provides a paginated list of pallet packages in a shipment. A palletized shipment will have pallets when the related details are provided after generating Less-Than-Truckload (LTL) carrier shipments.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 30 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId   Identifier of an inbound plan. (required)
       * @param shipmentId      Identifier of a shipment. A shipment contains the boxes and units being inbounded. (required)
       * @param pageSize        The number of pallets to return in the response matching the given query. (optional, default to 10)
       * @param paginationToken A token to fetch a certain page when there are multiple pages worth of results. The value of this token is fetched from the &#x60;pagination&#x60; returned in the API response. In the absence of the token value from the query parameter the API returns the first page of the result. (optional)
       * @return ApiResponse&lt;ListShipmentPalletsResponse&gt;
       * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public ApiResponse<ListShipmentPalletsResponse> listShipmentPalletsWithHttpInfo(String inboundPlanId, String shipmentId, Integer pageSize, String paginationToken) throws ApiException, LWAException {
          com.squareup.okhttp.Call call = listShipmentPalletsValidateBeforeCall(inboundPlanId, shipmentId, pageSize, paginationToken, null, null);
          Type localVarReturnType = new TypeToken<ListShipmentPalletsResponse>() {
          }.getType();
          return apiClient.execute(call, localVarReturnType);
      }
  
      /**
       * (asynchronously)
       * Provides a paginated list of pallet packages in a shipment. A palletized shipment will have pallets when the related details are provided after generating Less-Than-Truckload (LTL) carrier shipments.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 30 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId   Identifier of an inbound plan. (required)
       * @param shipmentId      Identifier of a shipment. A shipment contains the boxes and units being inbounded. (required)
       * @param pageSize        The number of pallets to return in the response matching the given query. (optional, default to 10)
       * @param paginationToken A token to fetch a certain page when there are multiple pages worth of results. The value of this token is fetched from the &#x60;pagination&#x60; returned in the API response. In the absence of the token value from the query parameter the API returns the first page of the result. (optional)
       * @param callback        The callback to be executed when the API call finishes
       * @return The request call
       * @throws ApiException If fail to process the API call, e.g. serializing the request body object
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public com.squareup.okhttp.Call listShipmentPalletsAsync(String inboundPlanId, String shipmentId, Integer pageSize, String paginationToken, final ApiCallback<ListShipmentPalletsResponse> callback) throws ApiException, LWAException {
  
          ProgressResponseBody.ProgressListener progressListener = null;
          ProgressRequestBody.ProgressRequestListener progressRequestListener = null;
  
          if (callback != null) {
              progressListener = new ProgressResponseBody.ProgressListener() {
                  @Override
                  public void update(long bytesRead, long contentLength, boolean done) {
                      callback.onDownloadProgress(bytesRead, contentLength, done);
                  }
              };
  
              progressRequestListener = new ProgressRequestBody.ProgressRequestListener() {
                  @Override
                  public void onRequestProgress(long bytesWritten, long contentLength, boolean done) {
                      callback.onUploadProgress(bytesWritten, contentLength, done);
                  }
              };
          }
  
          com.squareup.okhttp.Call call = listShipmentPalletsValidateBeforeCall(inboundPlanId, shipmentId, pageSize, paginationToken, progressListener, progressRequestListener);
          Type localVarReturnType = new TypeToken<ListShipmentPalletsResponse>() {
          }.getType();
          apiClient.executeAsync(call, localVarReturnType, callback);
          return call;
      }
  
      /**
       * Build call for listTransportationOptions
       *
       * @param inboundPlanId           Identifier of an inbound plan. (required)
       * @param pageSize                The number of transportation options to return in the response matching the given query. (optional, default to 10)
       * @param paginationToken         A token to fetch a certain page when there are multiple pages worth of results. The value of this token is fetched from the &#x60;pagination&#x60; returned in the API response. In the absence of the token value from the query parameter the API returns the first page of the result. (optional)
       * @param placementOptionId       The placement option to get transportation options for. Either &#x60;placementOptionId&#x60; or &#x60;shipmentId&#x60; must be specified. (optional)
       * @param shipmentId              The shipment to get transportation options for. Either &#x60;placementOptionId&#x60; or &#x60;shipmentId&#x60; must be specified. (optional)
       * @param progressListener        Progress listener
       * @param progressRequestListener Progress request listener
       * @return Call to execute
       * @throws ApiException If fail to serialize the request body object
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public com.squareup.okhttp.Call listTransportationOptionsCall(String inboundPlanId, Integer pageSize, String paginationToken, String placementOptionId, String shipmentId, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException, LWAException {
          Object localVarPostBody = null;
  
          // create path and map variables
          String localVarPath = "/inbound/fba/2024-03-20/inboundPlans/{inboundPlanId}/transportationOptions"
                  .replaceAll("\\{" + "inboundPlanId" + "\\}", apiClient.escapeString(inboundPlanId));
  
          List<Pair> localVarQueryParams = new ArrayList<Pair>();
          List<Pair> localVarCollectionQueryParams = new ArrayList<Pair>();
          if (pageSize != null)
              localVarQueryParams.addAll(apiClient.parameterToPair("pageSize", pageSize));
          if (paginationToken != null)
              localVarQueryParams.addAll(apiClient.parameterToPair("paginationToken", paginationToken));
          if (placementOptionId != null)
              localVarQueryParams.addAll(apiClient.parameterToPair("placementOptionId", placementOptionId));
          if (shipmentId != null)
              localVarQueryParams.addAll(apiClient.parameterToPair("shipmentId", shipmentId));
  
          Map<String, String> localVarHeaderParams = new HashMap<String, String>();
  
          Map<String, Object> localVarFormParams = new HashMap<String, Object>();
  
          final String[] localVarAccepts = {
                  "application/json"
          };
          final String localVarAccept = apiClient.selectHeaderAccept(localVarAccepts);
          if (localVarAccept != null) localVarHeaderParams.put("Accept", localVarAccept);
  
          final String[] localVarContentTypes = {
                  "application/json"
          };
          final String localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes);
          localVarHeaderParams.put("Content-Type", localVarContentType);
  
          if (progressListener != null) {
              apiClient.getHttpClient().networkInterceptors().add(new com.squareup.okhttp.Interceptor() {
                  @Override
                  public com.squareup.okhttp.Response intercept(com.squareup.okhttp.Interceptor.Chain chain) throws IOException {
                      com.squareup.okhttp.Response originalResponse = chain.proceed(chain.request());
                      return originalResponse.newBuilder()
                              .body(new ProgressResponseBody(originalResponse.body(), progressListener))
                              .build();
                  }
              });
          }
  
          String[] localVarAuthNames = new String[]{};
          return apiClient.buildCall(localVarPath, "GET", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarFormParams, localVarAuthNames, progressRequestListener);
      }
  
      @SuppressWarnings("rawtypes")
      private com.squareup.okhttp.Call listTransportationOptionsValidateBeforeCall(String inboundPlanId, Integer pageSize, String paginationToken, String placementOptionId, String shipmentId, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException, LWAException {
  
          // verify the required parameter 'inboundPlanId' is set
          if (inboundPlanId == null) {
              throw new ApiException("Missing the required parameter 'inboundPlanId' when calling listTransportationOptions(Async)");
          }
  
  
          com.squareup.okhttp.Call call = listTransportationOptionsCall(inboundPlanId, pageSize, paginationToken, placementOptionId, shipmentId, progressListener, progressRequestListener);
          return call;
  
      }
  
      /**
       * Retrieves all transportation options for a shipment. Transportation options must first be generated by the &#x60;generateTransportationOptions&#x60; operation before becoming available.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 6 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId     Identifier of an inbound plan. (required)
       * @param pageSize          The number of transportation options to return in the response matching the given query. (optional, default to 10)
       * @param paginationToken   A token to fetch a certain page when there are multiple pages worth of results. The value of this token is fetched from the &#x60;pagination&#x60; returned in the API response. In the absence of the token value from the query parameter the API returns the first page of the result. (optional)
       * @param placementOptionId The placement option to get transportation options for. Either &#x60;placementOptionId&#x60; or &#x60;shipmentId&#x60; must be specified. (optional)
       * @param shipmentId        The shipment to get transportation options for. Either &#x60;placementOptionId&#x60; or &#x60;shipmentId&#x60; must be specified. (optional)
       * @return ListTransportationOptionsResponse
       * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public ListTransportationOptionsResponse listTransportationOptions(String inboundPlanId, Integer pageSize, String paginationToken, String placementOptionId, String shipmentId) throws ApiException, LWAException {
          ApiResponse<ListTransportationOptionsResponse> resp = listTransportationOptionsWithHttpInfo(inboundPlanId, pageSize, paginationToken, placementOptionId, shipmentId);
          return resp.getData();
      }
  
      /**
       * Retrieves all transportation options for a shipment. Transportation options must first be generated by the &#x60;generateTransportationOptions&#x60; operation before becoming available.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 6 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId     Identifier of an inbound plan. (required)
       * @param pageSize          The number of transportation options to return in the response matching the given query. (optional, default to 10)
       * @param paginationToken   A token to fetch a certain page when there are multiple pages worth of results. The value of this token is fetched from the &#x60;pagination&#x60; returned in the API response. In the absence of the token value from the query parameter the API returns the first page of the result. (optional)
       * @param placementOptionId The placement option to get transportation options for. Either &#x60;placementOptionId&#x60; or &#x60;shipmentId&#x60; must be specified. (optional)
       * @param shipmentId        The shipment to get transportation options for. Either &#x60;placementOptionId&#x60; or &#x60;shipmentId&#x60; must be specified. (optional)
       * @return ApiResponse&lt;ListTransportationOptionsResponse&gt;
       * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public ApiResponse<ListTransportationOptionsResponse> listTransportationOptionsWithHttpInfo(String inboundPlanId, Integer pageSize, String paginationToken, String placementOptionId, String shipmentId) throws ApiException, LWAException {
          com.squareup.okhttp.Call call = listTransportationOptionsValidateBeforeCall(inboundPlanId, pageSize, paginationToken, placementOptionId, shipmentId, null, null);
          Type localVarReturnType = new TypeToken<ListTransportationOptionsResponse>() {
          }.getType();
          return apiClient.execute(call, localVarReturnType);
      }
  
      /**
       * (asynchronously)
       * Retrieves all transportation options for a shipment. Transportation options must first be generated by the &#x60;generateTransportationOptions&#x60; operation before becoming available.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 6 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId     Identifier of an inbound plan. (required)
       * @param pageSize          The number of transportation options to return in the response matching the given query. (optional, default to 10)
       * @param paginationToken   A token to fetch a certain page when there are multiple pages worth of results. The value of this token is fetched from the &#x60;pagination&#x60; returned in the API response. In the absence of the token value from the query parameter the API returns the first page of the result. (optional)
       * @param placementOptionId The placement option to get transportation options for. Either &#x60;placementOptionId&#x60; or &#x60;shipmentId&#x60; must be specified. (optional)
       * @param shipmentId        The shipment to get transportation options for. Either &#x60;placementOptionId&#x60; or &#x60;shipmentId&#x60; must be specified. (optional)
       * @param callback          The callback to be executed when the API call finishes
       * @return The request call
       * @throws ApiException If fail to process the API call, e.g. serializing the request body object
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public com.squareup.okhttp.Call listTransportationOptionsAsync(String inboundPlanId, Integer pageSize, String paginationToken, String placementOptionId, String shipmentId, final ApiCallback<ListTransportationOptionsResponse> callback) throws ApiException, LWAException {
  
          ProgressResponseBody.ProgressListener progressListener = null;
          ProgressRequestBody.ProgressRequestListener progressRequestListener = null;
  
          if (callback != null) {
              progressListener = new ProgressResponseBody.ProgressListener() {
                  @Override
                  public void update(long bytesRead, long contentLength, boolean done) {
                      callback.onDownloadProgress(bytesRead, contentLength, done);
                  }
              };
  
              progressRequestListener = new ProgressRequestBody.ProgressRequestListener() {
                  @Override
                  public void onRequestProgress(long bytesWritten, long contentLength, boolean done) {
                      callback.onUploadProgress(bytesWritten, contentLength, done);
                  }
              };
          }
  
          com.squareup.okhttp.Call call = listTransportationOptionsValidateBeforeCall(inboundPlanId, pageSize, paginationToken, placementOptionId, shipmentId, progressListener, progressRequestListener);
          Type localVarReturnType = new TypeToken<ListTransportationOptionsResponse>() {
          }.getType();
          apiClient.executeAsync(call, localVarReturnType, callback);
          return call;
      }
  
      /**
       * Build call for scheduleSelfShipAppointment
       *
       * @param inboundPlanId           Identifier of an inbound plan. (required)
       * @param shipmentId              Identifier of a shipment. A shipment contains the boxes and units being inbounded. (required)
       * @param slotId                  An identifier to a self-ship appointment slot. (required)
       * @param body                    The body of the request to &#x60;scheduleSelfShipAppointment&#x60;. (required)
       * @param progressListener        Progress listener
       * @param progressRequestListener Progress request listener
       * @return Call to execute
       * @throws ApiException If fail to serialize the request body object
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public com.squareup.okhttp.Call scheduleSelfShipAppointmentCall(String inboundPlanId, String shipmentId, String slotId, ScheduleSelfShipAppointmentRequest body, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException, LWAException {
          Object localVarPostBody = body;
  
          // create path and map variables
          String localVarPath = "/inbound/fba/2024-03-20/inboundPlans/{inboundPlanId}/shipments/{shipmentId}/selfShipAppointmentSlots/{slotId}/schedule"
                  .replaceAll("\\{" + "inboundPlanId" + "\\}", apiClient.escapeString(inboundPlanId))
                  .replaceAll("\\{" + "shipmentId" + "\\}", apiClient.escapeString(shipmentId))
                  .replaceAll("\\{" + "slotId" + "\\}", apiClient.escapeString(slotId));
  
          List<Pair> localVarQueryParams = new ArrayList<Pair>();
          List<Pair> localVarCollectionQueryParams = new ArrayList<Pair>();
  
          Map<String, String> localVarHeaderParams = new HashMap<String, String>();
  
          Map<String, Object> localVarFormParams = new HashMap<String, Object>();
  
          final String[] localVarAccepts = {
                  "application/json"
          };
          final String localVarAccept = apiClient.selectHeaderAccept(localVarAccepts);
          if (localVarAccept != null) localVarHeaderParams.put("Accept", localVarAccept);
  
          final String[] localVarContentTypes = {
                  "application/json"
          };
          final String localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes);
          localVarHeaderParams.put("Content-Type", localVarContentType);
  
          if (progressListener != null) {
              apiClient.getHttpClient().networkInterceptors().add(new com.squareup.okhttp.Interceptor() {
                  @Override
                  public com.squareup.okhttp.Response intercept(com.squareup.okhttp.Interceptor.Chain chain) throws IOException {
                      com.squareup.okhttp.Response originalResponse = chain.proceed(chain.request());
                      return originalResponse.newBuilder()
                              .body(new ProgressResponseBody(originalResponse.body(), progressListener))
                              .build();
                  }
              });
          }
  
          String[] localVarAuthNames = new String[]{};
          return apiClient.buildCall(localVarPath, "POST", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarFormParams, localVarAuthNames, progressRequestListener);
      }
  
      @SuppressWarnings("rawtypes")
      private com.squareup.okhttp.Call scheduleSelfShipAppointmentValidateBeforeCall(String inboundPlanId, String shipmentId, String slotId, ScheduleSelfShipAppointmentRequest body, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException, LWAException {
  
          // verify the required parameter 'inboundPlanId' is set
          if (inboundPlanId == null) {
              throw new ApiException("Missing the required parameter 'inboundPlanId' when calling scheduleSelfShipAppointment(Async)");
          }
  
          // verify the required parameter 'shipmentId' is set
          if (shipmentId == null) {
              throw new ApiException("Missing the required parameter 'shipmentId' when calling scheduleSelfShipAppointment(Async)");
          }
  
          // verify the required parameter 'slotId' is set
          if (slotId == null) {
              throw new ApiException("Missing the required parameter 'slotId' when calling scheduleSelfShipAppointment(Async)");
          }
  
          // verify the required parameter 'body' is set
          if (body == null) {
              throw new ApiException("Missing the required parameter 'body' when calling scheduleSelfShipAppointment(Async)");
          }
  
  
          com.squareup.okhttp.Call call = scheduleSelfShipAppointmentCall(inboundPlanId, shipmentId, slotId, body, progressListener, progressRequestListener);
          return call;
  
      }
  
      /**
       * Confirms or reschedules a self-ship appointment slot against a shipment.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 2 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId Identifier of an inbound plan. (required)
       * @param shipmentId    Identifier of a shipment. A shipment contains the boxes and units being inbounded. (required)
       * @param slotId        An identifier to a self-ship appointment slot. (required)
       * @param body          The body of the request to &#x60;scheduleSelfShipAppointment&#x60;. (required)
       * @return ScheduleSelfShipAppointmentResponse
       * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public ScheduleSelfShipAppointmentResponse scheduleSelfShipAppointment(String inboundPlanId, String shipmentId, String slotId, ScheduleSelfShipAppointmentRequest body) throws ApiException, LWAException {
          ApiResponse<ScheduleSelfShipAppointmentResponse> resp = scheduleSelfShipAppointmentWithHttpInfo(inboundPlanId, shipmentId, slotId, body);
          return resp.getData();
      }
  
      /**
       * Confirms or reschedules a self-ship appointment slot against a shipment.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 2 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId Identifier of an inbound plan. (required)
       * @param shipmentId    Identifier of a shipment. A shipment contains the boxes and units being inbounded. (required)
       * @param slotId        An identifier to a self-ship appointment slot. (required)
       * @param body          The body of the request to &#x60;scheduleSelfShipAppointment&#x60;. (required)
       * @return ApiResponse&lt;ScheduleSelfShipAppointmentResponse&gt;
       * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public ApiResponse<ScheduleSelfShipAppointmentResponse> scheduleSelfShipAppointmentWithHttpInfo(String inboundPlanId, String shipmentId, String slotId, ScheduleSelfShipAppointmentRequest body) throws ApiException, LWAException {
          com.squareup.okhttp.Call call = scheduleSelfShipAppointmentValidateBeforeCall(inboundPlanId, shipmentId, slotId, body, null, null);
          Type localVarReturnType = new TypeToken<ScheduleSelfShipAppointmentResponse>() {
          }.getType();
          return apiClient.execute(call, localVarReturnType);
      }
  
      /**
       * (asynchronously)
       * Confirms or reschedules a self-ship appointment slot against a shipment.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 2 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId Identifier of an inbound plan. (required)
       * @param shipmentId    Identifier of a shipment. A shipment contains the boxes and units being inbounded. (required)
       * @param slotId        An identifier to a self-ship appointment slot. (required)
       * @param body          The body of the request to &#x60;scheduleSelfShipAppointment&#x60;. (required)
       * @param callback      The callback to be executed when the API call finishes
       * @return The request call
       * @throws ApiException If fail to process the API call, e.g. serializing the request body object
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public com.squareup.okhttp.Call scheduleSelfShipAppointmentAsync(String inboundPlanId, String shipmentId, String slotId, ScheduleSelfShipAppointmentRequest body, final ApiCallback<ScheduleSelfShipAppointmentResponse> callback) throws ApiException, LWAException {
  
          ProgressResponseBody.ProgressListener progressListener = null;
          ProgressRequestBody.ProgressRequestListener progressRequestListener = null;
  
          if (callback != null) {
              progressListener = new ProgressResponseBody.ProgressListener() {
                  @Override
                  public void update(long bytesRead, long contentLength, boolean done) {
                      callback.onDownloadProgress(bytesRead, contentLength, done);
                  }
              };
  
              progressRequestListener = new ProgressRequestBody.ProgressRequestListener() {
                  @Override
                  public void onRequestProgress(long bytesWritten, long contentLength, boolean done) {
                      callback.onUploadProgress(bytesWritten, contentLength, done);
                  }
              };
          }
  
          com.squareup.okhttp.Call call = scheduleSelfShipAppointmentValidateBeforeCall(inboundPlanId, shipmentId, slotId, body, progressListener, progressRequestListener);
          Type localVarReturnType = new TypeToken<ScheduleSelfShipAppointmentResponse>() {
          }.getType();
          apiClient.executeAsync(call, localVarReturnType, callback);
          return call;
      }
  
      /**
       * Build call for setPackingInformation
       *
       * @param inboundPlanId           Identifier of an inbound plan. (required)
       * @param body                    The body of the request to &#x60;setPackingInformation&#x60;. (required)
       * @param progressListener        Progress listener
       * @param progressRequestListener Progress request listener
       * @return Call to execute
       * @throws ApiException If fail to serialize the request body object
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public com.squareup.okhttp.Call setPackingInformationCall(String inboundPlanId, SetPackingInformationRequest body, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException, LWAException {
          Object localVarPostBody = body;
  
          // create path and map variables
          String localVarPath = "/inbound/fba/2024-03-20/inboundPlans/{inboundPlanId}/packingInformation"
                  .replaceAll("\\{" + "inboundPlanId" + "\\}", apiClient.escapeString(inboundPlanId));
  
          List<Pair> localVarQueryParams = new ArrayList<Pair>();
          List<Pair> localVarCollectionQueryParams = new ArrayList<Pair>();
  
          Map<String, String> localVarHeaderParams = new HashMap<String, String>();
  
          Map<String, Object> localVarFormParams = new HashMap<String, Object>();
  
          final String[] localVarAccepts = {
                  "application/json"
          };
          final String localVarAccept = apiClient.selectHeaderAccept(localVarAccepts);
          if (localVarAccept != null) localVarHeaderParams.put("Accept", localVarAccept);
  
          final String[] localVarContentTypes = {
                  "application/json"
          };
          final String localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes);
          localVarHeaderParams.put("Content-Type", localVarContentType);
  
          if (progressListener != null) {
              apiClient.getHttpClient().networkInterceptors().add(new com.squareup.okhttp.Interceptor() {
                  @Override
                  public com.squareup.okhttp.Response intercept(com.squareup.okhttp.Interceptor.Chain chain) throws IOException {
                      com.squareup.okhttp.Response originalResponse = chain.proceed(chain.request());
                      return originalResponse.newBuilder()
                              .body(new ProgressResponseBody(originalResponse.body(), progressListener))
                              .build();
                  }
              });
          }
  
          String[] localVarAuthNames = new String[]{};
          return apiClient.buildCall(localVarPath, "POST", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarFormParams, localVarAuthNames, progressRequestListener);
      }
  
      @SuppressWarnings("rawtypes")
      private com.squareup.okhttp.Call setPackingInformationValidateBeforeCall(String inboundPlanId, SetPackingInformationRequest body, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException, LWAException {
  
          // verify the required parameter 'inboundPlanId' is set
          if (inboundPlanId == null) {
              throw new ApiException("Missing the required parameter 'inboundPlanId' when calling setPackingInformation(Async)");
          }
  
          // verify the required parameter 'body' is set
          if (body == null) {
              throw new ApiException("Missing the required parameter 'body' when calling setPackingInformation(Async)");
          }
  
  
          com.squareup.okhttp.Call call = setPackingInformationCall(inboundPlanId, body, progressListener, progressRequestListener);
          return call;
  
      }
  
      /**
       * Sets packing information for an inbound plan. This should be called after an inbound plan is created to populate the box level information required for planning and transportation estimates.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 2 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId Identifier of an inbound plan. (required)
       * @param body          The body of the request to &#x60;setPackingInformation&#x60;. (required)
       * @return SetPackingInformationResponse
       * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public SetPackingInformationResponse setPackingInformation(String inboundPlanId, SetPackingInformationRequest body) throws ApiException, LWAException {
          ApiResponse<SetPackingInformationResponse> resp = setPackingInformationWithHttpInfo(inboundPlanId, body);
          return resp.getData();
      }
  
      /**
       * Sets packing information for an inbound plan. This should be called after an inbound plan is created to populate the box level information required for planning and transportation estimates.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 2 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId Identifier of an inbound plan. (required)
       * @param body          The body of the request to &#x60;setPackingInformation&#x60;. (required)
       * @return ApiResponse&lt;SetPackingInformationResponse&gt;
       * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public ApiResponse<SetPackingInformationResponse> setPackingInformationWithHttpInfo(String inboundPlanId, SetPackingInformationRequest body) throws ApiException, LWAException {
          com.squareup.okhttp.Call call = setPackingInformationValidateBeforeCall(inboundPlanId, body, null, null);
          Type localVarReturnType = new TypeToken<SetPackingInformationResponse>() {
          }.getType();
          return apiClient.execute(call, localVarReturnType);
      }
  
      /**
       * (asynchronously)
       * Sets packing information for an inbound plan. This should be called after an inbound plan is created to populate the box level information required for planning and transportation estimates.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 2 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId Identifier of an inbound plan. (required)
       * @param body          The body of the request to &#x60;setPackingInformation&#x60;. (required)
       * @param callback      The callback to be executed when the API call finishes
       * @return The request call
       * @throws ApiException If fail to process the API call, e.g. serializing the request body object
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public com.squareup.okhttp.Call setPackingInformationAsync(String inboundPlanId, SetPackingInformationRequest body, final ApiCallback<SetPackingInformationResponse> callback) throws ApiException, LWAException {
  
          ProgressResponseBody.ProgressListener progressListener = null;
          ProgressRequestBody.ProgressRequestListener progressRequestListener = null;
  
          if (callback != null) {
              progressListener = new ProgressResponseBody.ProgressListener() {
                  @Override
                  public void update(long bytesRead, long contentLength, boolean done) {
                      callback.onDownloadProgress(bytesRead, contentLength, done);
                  }
              };
  
              progressRequestListener = new ProgressRequestBody.ProgressRequestListener() {
                  @Override
                  public void onRequestProgress(long bytesWritten, long contentLength, boolean done) {
                      callback.onUploadProgress(bytesWritten, contentLength, done);
                  }
              };
          }
  
          com.squareup.okhttp.Call call = setPackingInformationValidateBeforeCall(inboundPlanId, body, progressListener, progressRequestListener);
          Type localVarReturnType = new TypeToken<SetPackingInformationResponse>() {
          }.getType();
          apiClient.executeAsync(call, localVarReturnType, callback);
          return call;
      }
  
      /**
       * Build call for updateInboundPlanName
       *
       * @param inboundPlanId           Identifier of an inbound plan. (required)
       * @param body                    The body of the request to &#x60;updateInboundPlanName&#x60;. (required)
       * @param progressListener        Progress listener
       * @param progressRequestListener Progress request listener
       * @return Call to execute
       * @throws ApiException If fail to serialize the request body object
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public com.squareup.okhttp.Call updateInboundPlanNameCall(String inboundPlanId, UpdateInboundPlanNameRequest body, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException, LWAException {
          Object localVarPostBody = body;
  
          // create path and map variables
          String localVarPath = "/inbound/fba/2024-03-20/inboundPlans/{inboundPlanId}/name"
                  .replaceAll("\\{" + "inboundPlanId" + "\\}", apiClient.escapeString(inboundPlanId));
  
          List<Pair> localVarQueryParams = new ArrayList<Pair>();
          List<Pair> localVarCollectionQueryParams = new ArrayList<Pair>();
  
          Map<String, String> localVarHeaderParams = new HashMap<String, String>();
  
          Map<String, Object> localVarFormParams = new HashMap<String, Object>();
  
          final String[] localVarAccepts = {
                  "application/json"
          };
          final String localVarAccept = apiClient.selectHeaderAccept(localVarAccepts);
          if (localVarAccept != null) localVarHeaderParams.put("Accept", localVarAccept);
  
          final String[] localVarContentTypes = {
                  "application/json"
          };
          final String localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes);
          localVarHeaderParams.put("Content-Type", localVarContentType);
  
          if (progressListener != null) {
              apiClient.getHttpClient().networkInterceptors().add(new com.squareup.okhttp.Interceptor() {
                  @Override
                  public com.squareup.okhttp.Response intercept(com.squareup.okhttp.Interceptor.Chain chain) throws IOException {
                      com.squareup.okhttp.Response originalResponse = chain.proceed(chain.request());
                      return originalResponse.newBuilder()
                              .body(new ProgressResponseBody(originalResponse.body(), progressListener))
                              .build();
                  }
              });
          }
  
          String[] localVarAuthNames = new String[]{};
          return apiClient.buildCall(localVarPath, "PUT", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarFormParams, localVarAuthNames, progressRequestListener);
      }
  
      @SuppressWarnings("rawtypes")
      private com.squareup.okhttp.Call updateInboundPlanNameValidateBeforeCall(String inboundPlanId, UpdateInboundPlanNameRequest body, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException, LWAException {
  
          // verify the required parameter 'inboundPlanId' is set
          if (inboundPlanId == null) {
              throw new ApiException("Missing the required parameter 'inboundPlanId' when calling updateInboundPlanName(Async)");
          }
  
          // verify the required parameter 'body' is set
          if (body == null) {
              throw new ApiException("Missing the required parameter 'body' when calling updateInboundPlanName(Async)");
          }
  
  
          com.squareup.okhttp.Call call = updateInboundPlanNameCall(inboundPlanId, body, progressListener, progressRequestListener);
          return call;
  
      }
  
      /**
       * Updates the name of an existing inbound plan.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 30 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId Identifier of an inbound plan. (required)
       * @param body          The body of the request to &#x60;updateInboundPlanName&#x60;. (required)
       * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public void updateInboundPlanName(String inboundPlanId, UpdateInboundPlanNameRequest body) throws ApiException, LWAException {
          updateInboundPlanNameWithHttpInfo(inboundPlanId, body);
      }
  
      /**
       * Updates the name of an existing inbound plan.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 30 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId Identifier of an inbound plan. (required)
       * @param body          The body of the request to &#x60;updateInboundPlanName&#x60;. (required)
       * @return ApiResponse&lt;Void&gt;
       * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public ApiResponse<Void> updateInboundPlanNameWithHttpInfo(String inboundPlanId, UpdateInboundPlanNameRequest body) throws ApiException, LWAException {
          com.squareup.okhttp.Call call = updateInboundPlanNameValidateBeforeCall(inboundPlanId, body, null, null);
          return apiClient.execute(call);
      }
  
      /**
       * (asynchronously)
       * Updates the name of an existing inbound plan.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 30 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId Identifier of an inbound plan. (required)
       * @param body          The body of the request to &#x60;updateInboundPlanName&#x60;. (required)
       * @param callback      The callback to be executed when the API call finishes
       * @return The request call
       * @throws ApiException If fail to process the API call, e.g. serializing the request body object
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public com.squareup.okhttp.Call updateInboundPlanNameAsync(String inboundPlanId, UpdateInboundPlanNameRequest body, final ApiCallback<Void> callback) throws ApiException, LWAException {
  
          ProgressResponseBody.ProgressListener progressListener = null;
          ProgressRequestBody.ProgressRequestListener progressRequestListener = null;
  
          if (callback != null) {
              progressListener = new ProgressResponseBody.ProgressListener() {
                  @Override
                  public void update(long bytesRead, long contentLength, boolean done) {
                      callback.onDownloadProgress(bytesRead, contentLength, done);
                  }
              };
  
              progressRequestListener = new ProgressRequestBody.ProgressRequestListener() {
                  @Override
                  public void onRequestProgress(long bytesWritten, long contentLength, boolean done) {
                      callback.onUploadProgress(bytesWritten, contentLength, done);
                  }
              };
          }
  
          com.squareup.okhttp.Call call = updateInboundPlanNameValidateBeforeCall(inboundPlanId, body, progressListener, progressRequestListener);
          apiClient.executeAsync(call, callback);
          return call;
      }
  
      /**
       * Build call for updateItemComplianceDetails
       *
       * @param marketplaceId           The Marketplace ID. Refer to [Marketplace IDs](https://developer-docs.amazon.com/sp-api/docs/marketplace-ids) for a list of possible values. (required)
       * @param body                    The body of the request to &#x60;updateItemComplianceDetails&#x60;. (required)
       * @param progressListener        Progress listener
       * @param progressRequestListener Progress request listener
       * @return Call to execute
       * @throws ApiException If fail to serialize the request body object
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public com.squareup.okhttp.Call updateItemComplianceDetailsCall(String marketplaceId, UpdateItemComplianceDetailsRequest body, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException, LWAException {
          Object localVarPostBody = body;
  
          // create path and map variables
          String localVarPath = "/inbound/fba/2024-03-20/items/compliance";
  
          List<Pair> localVarQueryParams = new ArrayList<Pair>();
          List<Pair> localVarCollectionQueryParams = new ArrayList<Pair>();
          if (marketplaceId != null)
              localVarQueryParams.addAll(apiClient.parameterToPair("marketplaceId", marketplaceId));
  
          Map<String, String> localVarHeaderParams = new HashMap<String, String>();
  
          Map<String, Object> localVarFormParams = new HashMap<String, Object>();
  
          final String[] localVarAccepts = {
                  "application/json"
          };
          final String localVarAccept = apiClient.selectHeaderAccept(localVarAccepts);
          if (localVarAccept != null) localVarHeaderParams.put("Accept", localVarAccept);
  
          final String[] localVarContentTypes = {
                  "application/json"
          };
          final String localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes);
          localVarHeaderParams.put("Content-Type", localVarContentType);
  
          if (progressListener != null) {
              apiClient.getHttpClient().networkInterceptors().add(new com.squareup.okhttp.Interceptor() {
                  @Override
                  public com.squareup.okhttp.Response intercept(com.squareup.okhttp.Interceptor.Chain chain) throws IOException {
                      com.squareup.okhttp.Response originalResponse = chain.proceed(chain.request());
                      return originalResponse.newBuilder()
                              .body(new ProgressResponseBody(originalResponse.body(), progressListener))
                              .build();
                  }
              });
          }
  
          String[] localVarAuthNames = new String[]{};
          return apiClient.buildCall(localVarPath, "PUT", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarFormParams, localVarAuthNames, progressRequestListener);
      }
  
      @SuppressWarnings("rawtypes")
      private com.squareup.okhttp.Call updateItemComplianceDetailsValidateBeforeCall(String marketplaceId, UpdateItemComplianceDetailsRequest body, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException, LWAException {
  
          // verify the required parameter 'marketplaceId' is set
          if (marketplaceId == null) {
              throw new ApiException("Missing the required parameter 'marketplaceId' when calling updateItemComplianceDetails(Async)");
          }
  
          // verify the required parameter 'body' is set
          if (body == null) {
              throw new ApiException("Missing the required parameter 'body' when calling updateItemComplianceDetails(Async)");
          }
  
  
          com.squareup.okhttp.Call call = updateItemComplianceDetailsCall(marketplaceId, body, progressListener, progressRequestListener);
          return call;
  
      }
  
      /**
       * Update compliance details for list of MSKUs. The details provided here are only used for the IN marketplace compliance validation.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 2 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param marketplaceId The Marketplace ID. Refer to [Marketplace IDs](https://developer-docs.amazon.com/sp-api/docs/marketplace-ids) for a list of possible values. (required)
       * @param body          The body of the request to &#x60;updateItemComplianceDetails&#x60;. (required)
       * @return UpdateItemComplianceDetailsResponse
       * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public UpdateItemComplianceDetailsResponse updateItemComplianceDetails(String marketplaceId, UpdateItemComplianceDetailsRequest body) throws ApiException, LWAException {
          ApiResponse<UpdateItemComplianceDetailsResponse> resp = updateItemComplianceDetailsWithHttpInfo(marketplaceId, body);
          return resp.getData();
      }
  
      /**
       * Update compliance details for list of MSKUs. The details provided here are only used for the IN marketplace compliance validation.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 2 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param marketplaceId The Marketplace ID. Refer to [Marketplace IDs](https://developer-docs.amazon.com/sp-api/docs/marketplace-ids) for a list of possible values. (required)
       * @param body          The body of the request to &#x60;updateItemComplianceDetails&#x60;. (required)
       * @return ApiResponse&lt;UpdateItemComplianceDetailsResponse&gt;
       * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public ApiResponse<UpdateItemComplianceDetailsResponse> updateItemComplianceDetailsWithHttpInfo(String marketplaceId, UpdateItemComplianceDetailsRequest body) throws ApiException, LWAException {
          com.squareup.okhttp.Call call = updateItemComplianceDetailsValidateBeforeCall(marketplaceId, body, null, null);
          Type localVarReturnType = new TypeToken<UpdateItemComplianceDetailsResponse>() {
          }.getType();
          return apiClient.execute(call, localVarReturnType);
      }
  
      /**
       * (asynchronously)
       * Update compliance details for list of MSKUs. The details provided here are only used for the IN marketplace compliance validation.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 2 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param marketplaceId The Marketplace ID. Refer to [Marketplace IDs](https://developer-docs.amazon.com/sp-api/docs/marketplace-ids) for a list of possible values. (required)
       * @param body          The body of the request to &#x60;updateItemComplianceDetails&#x60;. (required)
       * @param callback      The callback to be executed when the API call finishes
       * @return The request call
       * @throws ApiException If fail to process the API call, e.g. serializing the request body object
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public com.squareup.okhttp.Call updateItemComplianceDetailsAsync(String marketplaceId, UpdateItemComplianceDetailsRequest body, final ApiCallback<UpdateItemComplianceDetailsResponse> callback) throws ApiException, LWAException {
  
          ProgressResponseBody.ProgressListener progressListener = null;
          ProgressRequestBody.ProgressRequestListener progressRequestListener = null;
  
          if (callback != null) {
              progressListener = new ProgressResponseBody.ProgressListener() {
                  @Override
                  public void update(long bytesRead, long contentLength, boolean done) {
                      callback.onDownloadProgress(bytesRead, contentLength, done);
                  }
              };
  
              progressRequestListener = new ProgressRequestBody.ProgressRequestListener() {
                  @Override
                  public void onRequestProgress(long bytesWritten, long contentLength, boolean done) {
                      callback.onUploadProgress(bytesWritten, contentLength, done);
                  }
              };
          }
  
          com.squareup.okhttp.Call call = updateItemComplianceDetailsValidateBeforeCall(marketplaceId, body, progressListener, progressRequestListener);
          Type localVarReturnType = new TypeToken<UpdateItemComplianceDetailsResponse>() {
          }.getType();
          apiClient.executeAsync(call, localVarReturnType, callback);
          return call;
      }
  
      /**
       * Build call for updateShipmentName
       *
       * @param inboundPlanId           Identifier of an inbound plan. (required)
       * @param shipmentId              Identifier of a shipment. A shipment contains the boxes and units being inbounded. (required)
       * @param body                    The body of the request to &#x60;updateShipmentName&#x60;. (required)
       * @param progressListener        Progress listener
       * @param progressRequestListener Progress request listener
       * @return Call to execute
       * @throws ApiException If fail to serialize the request body object
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public com.squareup.okhttp.Call updateShipmentNameCall(String inboundPlanId, String shipmentId, UpdateShipmentNameRequest body, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException, LWAException {
          Object localVarPostBody = body;
  
          // create path and map variables
          String localVarPath = "/inbound/fba/2024-03-20/inboundPlans/{inboundPlanId}/shipments/{shipmentId}/name"
                  .replaceAll("\\{" + "inboundPlanId" + "\\}", apiClient.escapeString(inboundPlanId))
                  .replaceAll("\\{" + "shipmentId" + "\\}", apiClient.escapeString(shipmentId));
  
          List<Pair> localVarQueryParams = new ArrayList<Pair>();
          List<Pair> localVarCollectionQueryParams = new ArrayList<Pair>();
  
          Map<String, String> localVarHeaderParams = new HashMap<String, String>();
  
          Map<String, Object> localVarFormParams = new HashMap<String, Object>();
  
          final String[] localVarAccepts = {
                  "application/json"
          };
          final String localVarAccept = apiClient.selectHeaderAccept(localVarAccepts);
          if (localVarAccept != null) localVarHeaderParams.put("Accept", localVarAccept);
  
          final String[] localVarContentTypes = {
                  "application/json"
          };
          final String localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes);
          localVarHeaderParams.put("Content-Type", localVarContentType);
  
          if (progressListener != null) {
              apiClient.getHttpClient().networkInterceptors().add(new com.squareup.okhttp.Interceptor() {
                  @Override
                  public com.squareup.okhttp.Response intercept(com.squareup.okhttp.Interceptor.Chain chain) throws IOException {
                      com.squareup.okhttp.Response originalResponse = chain.proceed(chain.request());
                      return originalResponse.newBuilder()
                              .body(new ProgressResponseBody(originalResponse.body(), progressListener))
                              .build();
                  }
              });
          }
  
          String[] localVarAuthNames = new String[]{};
          return apiClient.buildCall(localVarPath, "PUT", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarFormParams, localVarAuthNames, progressRequestListener);
      }
  
      @SuppressWarnings("rawtypes")
      private com.squareup.okhttp.Call updateShipmentNameValidateBeforeCall(String inboundPlanId, String shipmentId, UpdateShipmentNameRequest body, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException, LWAException {
  
          // verify the required parameter 'inboundPlanId' is set
          if (inboundPlanId == null) {
              throw new ApiException("Missing the required parameter 'inboundPlanId' when calling updateShipmentName(Async)");
          }
  
          // verify the required parameter 'shipmentId' is set
          if (shipmentId == null) {
              throw new ApiException("Missing the required parameter 'shipmentId' when calling updateShipmentName(Async)");
          }
  
          // verify the required parameter 'body' is set
          if (body == null) {
              throw new ApiException("Missing the required parameter 'body' when calling updateShipmentName(Async)");
          }
  
  
          com.squareup.okhttp.Call call = updateShipmentNameCall(inboundPlanId, shipmentId, body, progressListener, progressRequestListener);
          return call;
  
      }
  
      /**
       * Updates the name of an existing shipment.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 30 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId Identifier of an inbound plan. (required)
       * @param shipmentId    Identifier of a shipment. A shipment contains the boxes and units being inbounded. (required)
       * @param body          The body of the request to &#x60;updateShipmentName&#x60;. (required)
       * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public void updateShipmentName(String inboundPlanId, String shipmentId, UpdateShipmentNameRequest body) throws ApiException, LWAException {
          updateShipmentNameWithHttpInfo(inboundPlanId, shipmentId, body);
      }
  
      /**
       * Updates the name of an existing shipment.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 30 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId Identifier of an inbound plan. (required)
       * @param shipmentId    Identifier of a shipment. A shipment contains the boxes and units being inbounded. (required)
       * @param body          The body of the request to &#x60;updateShipmentName&#x60;. (required)
       * @return ApiResponse&lt;Void&gt;
       * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public ApiResponse<Void> updateShipmentNameWithHttpInfo(String inboundPlanId, String shipmentId, UpdateShipmentNameRequest body) throws ApiException, LWAException {
          com.squareup.okhttp.Call call = updateShipmentNameValidateBeforeCall(inboundPlanId, shipmentId, body, null, null);
          return apiClient.execute(call);
      }
  
      /**
       * (asynchronously)
       * Updates the name of an existing shipment.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 30 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId Identifier of an inbound plan. (required)
       * @param shipmentId    Identifier of a shipment. A shipment contains the boxes and units being inbounded. (required)
       * @param body          The body of the request to &#x60;updateShipmentName&#x60;. (required)
       * @param callback      The callback to be executed when the API call finishes
       * @return The request call
       * @throws ApiException If fail to process the API call, e.g. serializing the request body object
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public com.squareup.okhttp.Call updateShipmentNameAsync(String inboundPlanId, String shipmentId, UpdateShipmentNameRequest body, final ApiCallback<Void> callback) throws ApiException, LWAException {
  
          ProgressResponseBody.ProgressListener progressListener = null;
          ProgressRequestBody.ProgressRequestListener progressRequestListener = null;
  
          if (callback != null) {
              progressListener = new ProgressResponseBody.ProgressListener() {
                  @Override
                  public void update(long bytesRead, long contentLength, boolean done) {
                      callback.onDownloadProgress(bytesRead, contentLength, done);
                  }
              };
  
              progressRequestListener = new ProgressRequestBody.ProgressRequestListener() {
                  @Override
                  public void onRequestProgress(long bytesWritten, long contentLength, boolean done) {
                      callback.onUploadProgress(bytesWritten, contentLength, done);
                  }
              };
          }
  
          com.squareup.okhttp.Call call = updateShipmentNameValidateBeforeCall(inboundPlanId, shipmentId, body, progressListener, progressRequestListener);
          apiClient.executeAsync(call, callback);
          return call;
      }
  
      /**
       * Build call for updateShipmentSourceAddress
       *
       * @param inboundPlanId           Identifier of an inbound plan. (required)
       * @param shipmentId              Identifier of a shipment. A shipment contains the boxes and units being inbounded. (required)
       * @param body                    The body of the request to &#x60;updateShipmentSourceAddress&#x60;. (required)
       * @param progressListener        Progress listener
       * @param progressRequestListener Progress request listener
       * @return Call to execute
       * @throws ApiException If fail to serialize the request body object
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public com.squareup.okhttp.Call updateShipmentSourceAddressCall(String inboundPlanId, String shipmentId, UpdateShipmentSourceAddressRequest body, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException, LWAException {
          Object localVarPostBody = body;
  
          // create path and map variables
          String localVarPath = "/inbound/fba/2024-03-20/inboundPlans/{inboundPlanId}/shipments/{shipmentId}/sourceAddress"
                  .replaceAll("\\{" + "inboundPlanId" + "\\}", apiClient.escapeString(inboundPlanId))
                  .replaceAll("\\{" + "shipmentId" + "\\}", apiClient.escapeString(shipmentId));
  
          List<Pair> localVarQueryParams = new ArrayList<Pair>();
          List<Pair> localVarCollectionQueryParams = new ArrayList<Pair>();
  
          Map<String, String> localVarHeaderParams = new HashMap<String, String>();
  
          Map<String, Object> localVarFormParams = new HashMap<String, Object>();
  
          final String[] localVarAccepts = {
                  "application/json"
          };
          final String localVarAccept = apiClient.selectHeaderAccept(localVarAccepts);
          if (localVarAccept != null) localVarHeaderParams.put("Accept", localVarAccept);
  
          final String[] localVarContentTypes = {
                  "application/json"
          };
          final String localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes);
          localVarHeaderParams.put("Content-Type", localVarContentType);
  
          if (progressListener != null) {
              apiClient.getHttpClient().networkInterceptors().add(new com.squareup.okhttp.Interceptor() {
                  @Override
                  public com.squareup.okhttp.Response intercept(com.squareup.okhttp.Interceptor.Chain chain) throws IOException {
                      com.squareup.okhttp.Response originalResponse = chain.proceed(chain.request());
                      return originalResponse.newBuilder()
                              .body(new ProgressResponseBody(originalResponse.body(), progressListener))
                              .build();
                  }
              });
          }
  
          String[] localVarAuthNames = new String[]{};
          return apiClient.buildCall(localVarPath, "PUT", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarFormParams, localVarAuthNames, progressRequestListener);
      }
  
      @SuppressWarnings("rawtypes")
      private com.squareup.okhttp.Call updateShipmentSourceAddressValidateBeforeCall(String inboundPlanId, String shipmentId, UpdateShipmentSourceAddressRequest body, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException, LWAException {
  
          // verify the required parameter 'inboundPlanId' is set
          if (inboundPlanId == null) {
              throw new ApiException("Missing the required parameter 'inboundPlanId' when calling updateShipmentSourceAddress(Async)");
          }
  
          // verify the required parameter 'shipmentId' is set
          if (shipmentId == null) {
              throw new ApiException("Missing the required parameter 'shipmentId' when calling updateShipmentSourceAddress(Async)");
          }
  
          // verify the required parameter 'body' is set
          if (body == null) {
              throw new ApiException("Missing the required parameter 'body' when calling updateShipmentSourceAddress(Async)");
          }
  
  
          com.squareup.okhttp.Call call = updateShipmentSourceAddressCall(inboundPlanId, shipmentId, body, progressListener, progressRequestListener);
          return call;
  
      }
  
      /**
       * Updates the source address of an existing shipment. The shipment source address can only be updated prior to the confirmation of the shipment carriers. As a result of the updated source address, existing transportation options will be invalidated and will need to be regenerated to capture the potential difference in transportation options and quotes due to the new source address.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 30 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId Identifier of an inbound plan. (required)
       * @param shipmentId    Identifier of a shipment. A shipment contains the boxes and units being inbounded. (required)
       * @param body          The body of the request to &#x60;updateShipmentSourceAddress&#x60;. (required)
       * @return UpdateShipmentSourceAddressResponse
       * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public UpdateShipmentSourceAddressResponse updateShipmentSourceAddress(String inboundPlanId, String shipmentId, UpdateShipmentSourceAddressRequest body) throws ApiException, LWAException {
          ApiResponse<UpdateShipmentSourceAddressResponse> resp = updateShipmentSourceAddressWithHttpInfo(inboundPlanId, shipmentId, body);
          return resp.getData();
      }
  
      /**
       * Updates the source address of an existing shipment. The shipment source address can only be updated prior to the confirmation of the shipment carriers. As a result of the updated source address, existing transportation options will be invalidated and will need to be regenerated to capture the potential difference in transportation options and quotes due to the new source address.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 30 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId Identifier of an inbound plan. (required)
       * @param shipmentId    Identifier of a shipment. A shipment contains the boxes and units being inbounded. (required)
       * @param body          The body of the request to &#x60;updateShipmentSourceAddress&#x60;. (required)
       * @return ApiResponse&lt;UpdateShipmentSourceAddressResponse&gt;
       * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public ApiResponse<UpdateShipmentSourceAddressResponse> updateShipmentSourceAddressWithHttpInfo(String inboundPlanId, String shipmentId, UpdateShipmentSourceAddressRequest body) throws ApiException, LWAException {
          com.squareup.okhttp.Call call = updateShipmentSourceAddressValidateBeforeCall(inboundPlanId, shipmentId, body, null, null);
          Type localVarReturnType = new TypeToken<UpdateShipmentSourceAddressResponse>() {
          }.getType();
          return apiClient.execute(call, localVarReturnType);
      }
  
      /**
       * (asynchronously)
       * Updates the source address of an existing shipment. The shipment source address can only be updated prior to the confirmation of the shipment carriers. As a result of the updated source address, existing transportation options will be invalidated and will need to be regenerated to capture the potential difference in transportation options and quotes due to the new source address.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 30 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId Identifier of an inbound plan. (required)
       * @param shipmentId    Identifier of a shipment. A shipment contains the boxes and units being inbounded. (required)
       * @param body          The body of the request to &#x60;updateShipmentSourceAddress&#x60;. (required)
       * @param callback      The callback to be executed when the API call finishes
       * @return The request call
       * @throws ApiException If fail to process the API call, e.g. serializing the request body object
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public com.squareup.okhttp.Call updateShipmentSourceAddressAsync(String inboundPlanId, String shipmentId, UpdateShipmentSourceAddressRequest body, final ApiCallback<UpdateShipmentSourceAddressResponse> callback) throws ApiException, LWAException {
  
          ProgressResponseBody.ProgressListener progressListener = null;
          ProgressRequestBody.ProgressRequestListener progressRequestListener = null;
  
          if (callback != null) {
              progressListener = new ProgressResponseBody.ProgressListener() {
                  @Override
                  public void update(long bytesRead, long contentLength, boolean done) {
                      callback.onDownloadProgress(bytesRead, contentLength, done);
                  }
              };
  
              progressRequestListener = new ProgressRequestBody.ProgressRequestListener() {
                  @Override
                  public void onRequestProgress(long bytesWritten, long contentLength, boolean done) {
                      callback.onUploadProgress(bytesWritten, contentLength, done);
                  }
              };
          }
  
          com.squareup.okhttp.Call call = updateShipmentSourceAddressValidateBeforeCall(inboundPlanId, shipmentId, body, progressListener, progressRequestListener);
          Type localVarReturnType = new TypeToken<UpdateShipmentSourceAddressResponse>() {
          }.getType();
          apiClient.executeAsync(call, localVarReturnType, callback);
          return call;
      }
  
      /**
       * Build call for updateShipmentTrackingDetails
       *
       * @param inboundPlanId           Identifier of an inbound plan. (required)
       * @param shipmentId              Identifier of a shipment. A shipment contains the boxes and units being inbounded. (required)
       * @param body                    The body of the request to &#x60;updateShipmentTrackingDetails&#x60;. (required)
       * @param progressListener        Progress listener
       * @param progressRequestListener Progress request listener
       * @return Call to execute
       * @throws ApiException If fail to serialize the request body object
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public com.squareup.okhttp.Call updateShipmentTrackingDetailsCall(String inboundPlanId, String shipmentId, UpdateShipmentTrackingDetailsRequest body, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException, LWAException {
          Object localVarPostBody = body;
  
          // create path and map variables
          String localVarPath = "/inbound/fba/2024-03-20/inboundPlans/{inboundPlanId}/shipments/{shipmentId}/trackingDetails"
                  .replaceAll("\\{" + "inboundPlanId" + "\\}", apiClient.escapeString(inboundPlanId))
                  .replaceAll("\\{" + "shipmentId" + "\\}", apiClient.escapeString(shipmentId));
  
          List<Pair> localVarQueryParams = new ArrayList<Pair>();
          List<Pair> localVarCollectionQueryParams = new ArrayList<Pair>();
  
          Map<String, String> localVarHeaderParams = new HashMap<String, String>();
  
          Map<String, Object> localVarFormParams = new HashMap<String, Object>();
  
          final String[] localVarAccepts = {
                  "application/json"
          };
          final String localVarAccept = apiClient.selectHeaderAccept(localVarAccepts);
          if (localVarAccept != null) localVarHeaderParams.put("Accept", localVarAccept);
  
          final String[] localVarContentTypes = {
                  "application/json"
          };
          final String localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes);
          localVarHeaderParams.put("Content-Type", localVarContentType);
  
          if (progressListener != null) {
              apiClient.getHttpClient().networkInterceptors().add(new com.squareup.okhttp.Interceptor() {
                  @Override
                  public com.squareup.okhttp.Response intercept(com.squareup.okhttp.Interceptor.Chain chain) throws IOException {
                      com.squareup.okhttp.Response originalResponse = chain.proceed(chain.request());
                      return originalResponse.newBuilder()
                              .body(new ProgressResponseBody(originalResponse.body(), progressListener))
                              .build();
                  }
              });
          }
  
          String[] localVarAuthNames = new String[]{};
          return apiClient.buildCall(localVarPath, "PUT", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarFormParams, localVarAuthNames, progressRequestListener);
      }
  
      @SuppressWarnings("rawtypes")
      private com.squareup.okhttp.Call updateShipmentTrackingDetailsValidateBeforeCall(String inboundPlanId, String shipmentId, UpdateShipmentTrackingDetailsRequest body, final ProgressResponseBody.ProgressListener progressListener, final ProgressRequestBody.ProgressRequestListener progressRequestListener) throws ApiException, LWAException {
  
          // verify the required parameter 'inboundPlanId' is set
          if (inboundPlanId == null) {
              throw new ApiException("Missing the required parameter 'inboundPlanId' when calling updateShipmentTrackingDetails(Async)");
          }
  
          // verify the required parameter 'shipmentId' is set
          if (shipmentId == null) {
              throw new ApiException("Missing the required parameter 'shipmentId' when calling updateShipmentTrackingDetails(Async)");
          }
  
          // verify the required parameter 'body' is set
          if (body == null) {
              throw new ApiException("Missing the required parameter 'body' when calling updateShipmentTrackingDetails(Async)");
          }
  
  
          com.squareup.okhttp.Call call = updateShipmentTrackingDetailsCall(inboundPlanId, shipmentId, body, progressListener, progressRequestListener);
          return call;
  
      }
  
      /**
       * Updates a shipment&#39;s tracking details.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 2 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId Identifier of an inbound plan. (required)
       * @param shipmentId    Identifier of a shipment. A shipment contains the boxes and units being inbounded. (required)
       * @param body          The body of the request to &#x60;updateShipmentTrackingDetails&#x60;. (required)
       * @return UpdateShipmentTrackingDetailsResponse
       * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public UpdateShipmentTrackingDetailsResponse updateShipmentTrackingDetails(String inboundPlanId, String shipmentId, UpdateShipmentTrackingDetailsRequest body) throws ApiException, LWAException {
          ApiResponse<UpdateShipmentTrackingDetailsResponse> resp = updateShipmentTrackingDetailsWithHttpInfo(inboundPlanId, shipmentId, body);
          return resp.getData();
      }
  
      /**
       * Updates a shipment&#39;s tracking details.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 2 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId Identifier of an inbound plan. (required)
       * @param shipmentId    Identifier of a shipment. A shipment contains the boxes and units being inbounded. (required)
       * @param body          The body of the request to &#x60;updateShipmentTrackingDetails&#x60;. (required)
       * @return ApiResponse&lt;UpdateShipmentTrackingDetailsResponse&gt;
       * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public ApiResponse<UpdateShipmentTrackingDetailsResponse> updateShipmentTrackingDetailsWithHttpInfo(String inboundPlanId, String shipmentId, UpdateShipmentTrackingDetailsRequest body) throws ApiException, LWAException {
          com.squareup.okhttp.Call call = updateShipmentTrackingDetailsValidateBeforeCall(inboundPlanId, shipmentId, body, null, null);
          Type localVarReturnType = new TypeToken<UpdateShipmentTrackingDetailsResponse>() {
          }.getType();
          return apiClient.execute(call, localVarReturnType);
      }
  
      /**
       * (asynchronously)
       * Updates a shipment&#39;s tracking details.  **Usage Plan:**  | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 2 |  The &#x60;x-amzn-RateLimit-Limit&#x60; response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
       *
       * @param inboundPlanId Identifier of an inbound plan. (required)
       * @param shipmentId    Identifier of a shipment. A shipment contains the boxes and units being inbounded. (required)
       * @param body          The body of the request to &#x60;updateShipmentTrackingDetails&#x60;. (required)
       * @param callback      The callback to be executed when the API call finishes
       * @return The request call
       * @throws ApiException If fail to process the API call, e.g. serializing the request body object
       * @throws LWAException If calls to fetch LWA access token fails
       */
      public com.squareup.okhttp.Call updateShipmentTrackingDetailsAsync(String inboundPlanId, String shipmentId, UpdateShipmentTrackingDetailsRequest body, final ApiCallback<UpdateShipmentTrackingDetailsResponse> callback) throws ApiException, LWAException {
  
          ProgressResponseBody.ProgressListener progressListener = null;
          ProgressRequestBody.ProgressRequestListener progressRequestListener = null;
  
          if (callback != null) {
              progressListener = new ProgressResponseBody.ProgressListener() {
                  @Override
                  public void update(long bytesRead, long contentLength, boolean done) {
                      callback.onDownloadProgress(bytesRead, contentLength, done);
                  }
              };
  
              progressRequestListener = new ProgressRequestBody.ProgressRequestListener() {
                  @Override
                  public void onRequestProgress(long bytesWritten, long contentLength, boolean done) {
                      callback.onUploadProgress(bytesWritten, contentLength, done);
                  }
              };
          }
  
          com.squareup.okhttp.Call call = updateShipmentTrackingDetailsValidateBeforeCall(inboundPlanId, shipmentId, body, progressListener, progressRequestListener);
          Type localVarReturnType = new TypeToken<UpdateShipmentTrackingDetailsResponse>() {
          }.getType();
          apiClient.executeAsync(call, localVarReturnType, callback);
          return call;
      }
  
      public static class Builder {
          private LWAAuthorizationCredentials lwaAuthorizationCredentials;
          private String endpoint;
          private LWAAccessTokenCache lwaAccessTokenCache;
          private Boolean disableAccessTokenCache = false;
          private RateLimitConfiguration rateLimitConfiguration;
  
  
          public Builder lwaAuthorizationCredentials(LWAAuthorizationCredentials lwaAuthorizationCredentials) {
              this.lwaAuthorizationCredentials = lwaAuthorizationCredentials;
              return this;
          }
  
          public Builder endpoint(String endpoint) {
              this.endpoint = endpoint;
              return this;
          }
  
          public Builder lwaAccessTokenCache(LWAAccessTokenCache lwaAccessTokenCache) {
              this.lwaAccessTokenCache = lwaAccessTokenCache;
              return this;
          }
  
          public Builder disableAccessTokenCache() {
              this.disableAccessTokenCache = true;
              return this;
          }
  
          public Builder rateLimitConfigurationOnRequests(RateLimitConfiguration rateLimitConfiguration) {
              this.rateLimitConfiguration = rateLimitConfiguration;
              return this;
          }
  
          public Builder disableRateLimitOnRequests() {
              this.rateLimitConfiguration = null;
              return this;
          }
  
          public FbaInboundApi build() {
              if (lwaAuthorizationCredentials == null) {
                  throw new RuntimeException("LWAAuthorizationCredentials not set");
              }
  
              if (StringUtil.isEmpty(endpoint)) {
                  throw new RuntimeException("Endpoint not set");
              }
  
              LWAAuthorizationSigner lwaAuthorizationSigner = null;
              if (disableAccessTokenCache) {
                  lwaAuthorizationSigner = new LWAAuthorizationSigner(lwaAuthorizationCredentials);
              } else {
                  if (lwaAccessTokenCache == null) {
                      lwaAccessTokenCache = new LWAAccessTokenCacheImpl();
                  }
                  lwaAuthorizationSigner = new LWAAuthorizationSigner(lwaAuthorizationCredentials, lwaAccessTokenCache);
              }
  
              return new FbaInboundApi(new ApiClient()
                      .setLWAAuthorizationSigner(lwaAuthorizationSigner)
                      .setBasePath(endpoint)
                      .setRateLimiter(rateLimitConfiguration));
          }
      }
  }
  