All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.docusign.esign.api.UsersApi Maven / Gradle / Ivy

Go to download

The official DocuSign eSignature JAVA client is based on version 2 of the DocuSign REST API and provides libraries for JAVA application integration. It is recommended that you use this version of the library for new development.

There is a newer version: 6.0.0
Show newest version
package com.docusign.esign.api;

import com.docusign.esign.client.ApiClient;
import com.docusign.esign.client.ApiException;
import com.docusign.esign.client.ApiResponse;
import com.docusign.esign.client.Configuration;
import com.docusign.esign.client.Pair;
import com.docusign.esign.model.*;
import jakarta.ws.rs.core.GenericType;

/** UsersApi class. */
public class UsersApi {
  private ApiClient apiClient;

  /** UsersApi. */
  public UsersApi() {
    this(Configuration.getDefaultApiClient());
  }

  /** UsersApi. */
  public UsersApi(ApiClient apiClient) {
    this.apiClient = apiClient;
  }

  /**
   * getApiClient Method.
   *
   * @return ApiClient
   */
  public ApiClient getApiClient() {
    return apiClient;
  }

  /** setApiClient Method. */
  public void setApiClient(ApiClient apiClient) {
    this.apiClient = apiClient;
  }

  /// 
  /// Retrieves the list of users for the specified account. Retrieves the list of users for the
  // specified account.  The response returns the list of users for the account along with the
  // information about the result set. If the `additional_info` query was added to the
  // endpoint and set to **true**, the full user information is returned for each user
  /// 

  /** CallListOptions Class. */
  public class CallListOptions {
    private String additionalInfo = null;
    private String alternateAdminsOnly = null;
    private String count = null;
    private String domainUsersOnly = null;
    private String email = null;
    private String emailSubstring = null;
    private String groupId = null;
    private String includeUsersettingsForCsv = null;
    private String loginStatus = null;
    private String notGroupId = null;
    private String startPosition = null;
    private String status = null;
    private String userNameSubstring = null;

    /** setAdditionalInfo method. */
    public void setAdditionalInfo(String additionalInfo) {
      this.additionalInfo = additionalInfo;
    }

    /**
     * getAdditionalInfo method.
     *
     * @return String
     */
    public String getAdditionalInfo() {
      return this.additionalInfo;
    }

    /** setAlternateAdminsOnly method. */
    public void setAlternateAdminsOnly(String alternateAdminsOnly) {
      this.alternateAdminsOnly = alternateAdminsOnly;
    }

    /**
     * getAlternateAdminsOnly method.
     *
     * @return String
     */
    public String getAlternateAdminsOnly() {
      return this.alternateAdminsOnly;
    }

    /** setCount method. */
    public void setCount(String count) {
      this.count = count;
    }

    /**
     * getCount method.
     *
     * @return String
     */
    public String getCount() {
      return this.count;
    }

    /** setDomainUsersOnly method. */
    public void setDomainUsersOnly(String domainUsersOnly) {
      this.domainUsersOnly = domainUsersOnly;
    }

    /**
     * getDomainUsersOnly method.
     *
     * @return String
     */
    public String getDomainUsersOnly() {
      return this.domainUsersOnly;
    }

    /** setEmail method. */
    public void setEmail(String email) {
      this.email = email;
    }

    /**
     * getEmail method.
     *
     * @return String
     */
    public String getEmail() {
      return this.email;
    }

    /** setEmailSubstring method. */
    public void setEmailSubstring(String emailSubstring) {
      this.emailSubstring = emailSubstring;
    }

    /**
     * getEmailSubstring method.
     *
     * @return String
     */
    public String getEmailSubstring() {
      return this.emailSubstring;
    }

    /** setGroupId method. */
    public void setGroupId(String groupId) {
      this.groupId = groupId;
    }

    /**
     * getGroupId method.
     *
     * @return String
     */
    public String getGroupId() {
      return this.groupId;
    }

    /** setIncludeUsersettingsForCsv method. */
    public void setIncludeUsersettingsForCsv(String includeUsersettingsForCsv) {
      this.includeUsersettingsForCsv = includeUsersettingsForCsv;
    }

    /**
     * getIncludeUsersettingsForCsv method.
     *
     * @return String
     */
    public String getIncludeUsersettingsForCsv() {
      return this.includeUsersettingsForCsv;
    }

    /** setLoginStatus method. */
    public void setLoginStatus(String loginStatus) {
      this.loginStatus = loginStatus;
    }

    /**
     * getLoginStatus method.
     *
     * @return String
     */
    public String getLoginStatus() {
      return this.loginStatus;
    }

    /** setNotGroupId method. */
    public void setNotGroupId(String notGroupId) {
      this.notGroupId = notGroupId;
    }

    /**
     * getNotGroupId method.
     *
     * @return String
     */
    public String getNotGroupId() {
      return this.notGroupId;
    }

    /** setStartPosition method. */
    public void setStartPosition(String startPosition) {
      this.startPosition = startPosition;
    }

    /**
     * getStartPosition method.
     *
     * @return String
     */
    public String getStartPosition() {
      return this.startPosition;
    }

    /** setStatus method. */
    public void setStatus(String status) {
      this.status = status;
    }

    /**
     * getStatus method.
     *
     * @return String
     */
    public String getStatus() {
      return this.status;
    }

    /** setUserNameSubstring method. */
    public void setUserNameSubstring(String userNameSubstring) {
      this.userNameSubstring = userNameSubstring;
    }

    /**
     * getUserNameSubstring method.
     *
     * @return String
     */
    public String getUserNameSubstring() {
      return this.userNameSubstring;
    }
  }

  /**
   * Retrieves the list of users for the specified account.. Retrieves the list of users for the
   * specified account. The response returns the list of users for the account along with the
   * information about the result set. If the `additional_info` query was added to the
   * endpoint and set to **true**, the full user information is returned for each user
   *
   * @param accountId The external account number (int) or account ID Guid. (required)
   * @return UserInformationList
   */
  public UserInformationList callList(String accountId) throws ApiException {
    return callList(accountId, null);
  }

  /**
   * Retrieves the list of users for the specified account.. Retrieves the list of users for the
   * specified account. The response returns the list of users for the account along with the
   * information about the result set. If the `additional_info` query was added to the
   * endpoint and set to **true**, the full user information is returned for each user
   *
   * @param accountId The external account number (int) or account ID Guid. (required)
   * @param options for modifying the method behavior.
   * @return UserInformationList
   * @throws ApiException if fails to make API call
   */
  public UserInformationList callList(String accountId, UsersApi.CallListOptions options)
      throws ApiException {
    ApiResponse localVarResponse = callListWithHttpInfo(accountId, options);
    return localVarResponse.getData();
  }

  /**
   * Retrieves the list of users for the specified account. Retrieves the list of users for the
   * specified account. The response returns the list of users for the account along with the
   * information about the result set. If the `additional_info` query was added to the
   * endpoint and set to **true**, the full user information is returned for each user
   *
   * @param accountId The external account number (int) or account ID Guid. (required)
   * @param options for modifying the method behavior.
   * @return UserInformationList
   * @throws ApiException if fails to make API call
   */
  public ApiResponse callListWithHttpInfo(
      String accountId, UsersApi.CallListOptions options) throws ApiException {
    Object localVarPostBody = "{}";

    // verify the required parameter 'accountId' is set
    if (accountId == null) {
      throw new ApiException(
          400, "Missing the required parameter 'accountId' when calling callList");
    }

    // create path and map variables
    String localVarPath =
        "/v2.1/accounts/{accountId}/users"
            .replaceAll("\\{" + "accountId" + "\\}", apiClient.escapeString(accountId.toString()));

    // query params
    java.util.List localVarQueryParams = new java.util.ArrayList();
    java.util.List localVarCollectionQueryParams = new java.util.ArrayList();
    java.util.Map localVarHeaderParams = new java.util.HashMap();
    java.util.Map localVarFormParams = new java.util.HashMap();

    if (options != null) {
      localVarQueryParams.addAll(
          apiClient.parameterToPair("additional_info", options.additionalInfo));
    }
    if (options != null) {
      localVarQueryParams.addAll(
          apiClient.parameterToPair("alternate_admins_only", options.alternateAdminsOnly));
    }
    if (options != null) {
      localVarQueryParams.addAll(apiClient.parameterToPair("count", options.count));
    }
    if (options != null) {
      localVarQueryParams.addAll(
          apiClient.parameterToPair("domain_users_only", options.domainUsersOnly));
    }
    if (options != null) {
      localVarQueryParams.addAll(apiClient.parameterToPair("email", options.email));
    }
    if (options != null) {
      localVarQueryParams.addAll(
          apiClient.parameterToPair("email_substring", options.emailSubstring));
    }
    if (options != null) {
      localVarQueryParams.addAll(apiClient.parameterToPair("group_id", options.groupId));
    }
    if (options != null) {
      localVarQueryParams.addAll(
          apiClient.parameterToPair(
              "include_usersettings_for_csv", options.includeUsersettingsForCsv));
    }
    if (options != null) {
      localVarQueryParams.addAll(apiClient.parameterToPair("login_status", options.loginStatus));
    }
    if (options != null) {
      localVarQueryParams.addAll(apiClient.parameterToPair("not_group_id", options.notGroupId));
    }
    if (options != null) {
      localVarQueryParams.addAll(
          apiClient.parameterToPair("start_position", options.startPosition));
    }
    if (options != null) {
      localVarQueryParams.addAll(apiClient.parameterToPair("status", options.status));
    }
    if (options != null) {
      localVarQueryParams.addAll(
          apiClient.parameterToPair("user_name_substring", options.userNameSubstring));
    }

    final String[] localVarAccepts = {"application/json"};
    final String localVarAccept = apiClient.selectHeaderAccept(localVarAccepts);

    final String[] localVarContentTypes = {};

    final String localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes);

    String[] localVarAuthNames = new String[] {"docusignAccessCode"};

    GenericType localVarReturnType = new GenericType() {};
    UserInformationList localVarResponse =
        apiClient.invokeAPI(
            localVarPath,
            "GET",
            localVarQueryParams,
            localVarCollectionQueryParams,
            localVarPostBody,
            localVarHeaderParams,
            localVarFormParams,
            localVarAccept,
            localVarContentType,
            localVarAuthNames,
            localVarReturnType);
    return new ApiResponse(
        apiClient.getStatusCode(), apiClient.getResponseHeaders(), localVarResponse);
  }

  /**
   * Adds news user to the specified account.. Adds new users to your account. Set the
   * `userSettings` property in the request to specify the actions the users can perform
   * on the account.
   *
   * @param accountId The external account number (int) or account ID Guid. (required)
   * @param newUsersDefinition (optional)
   * @return NewUsersSummary
   * @throws ApiException if fails to make API call
   */
  public NewUsersSummary create(String accountId, NewUsersDefinition newUsersDefinition)
      throws ApiException {
    ApiResponse localVarResponse =
        createWithHttpInfo(accountId, newUsersDefinition);
    return localVarResponse.getData();
  }

  /**
   * Adds news user to the specified account. Adds new users to your account. Set the
   * `userSettings` property in the request to specify the actions the users can perform
   * on the account.
   *
   * @param accountId The external account number (int) or account ID Guid. (required)
   * @param newUsersDefinition (optional)
   * @return NewUsersSummary
   * @throws ApiException if fails to make API call
   */
  public ApiResponse createWithHttpInfo(
      String accountId, NewUsersDefinition newUsersDefinition) throws ApiException {
    Object localVarPostBody = newUsersDefinition;

    // verify the required parameter 'accountId' is set
    if (accountId == null) {
      throw new ApiException(400, "Missing the required parameter 'accountId' when calling create");
    }

    // create path and map variables
    String localVarPath =
        "/v2.1/accounts/{accountId}/users"
            .replaceAll("\\{" + "accountId" + "\\}", apiClient.escapeString(accountId.toString()));

    // query params
    java.util.List localVarQueryParams = new java.util.ArrayList();
    java.util.List localVarCollectionQueryParams = new java.util.ArrayList();
    java.util.Map localVarHeaderParams = new java.util.HashMap();
    java.util.Map localVarFormParams = new java.util.HashMap();

    final String[] localVarAccepts = {"application/json"};
    final String localVarAccept = apiClient.selectHeaderAccept(localVarAccepts);

    final String[] localVarContentTypes = {};

    final String localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes);

    String[] localVarAuthNames = new String[] {"docusignAccessCode"};

    GenericType localVarReturnType = new GenericType() {};
    NewUsersSummary localVarResponse =
        apiClient.invokeAPI(
            localVarPath,
            "POST",
            localVarQueryParams,
            localVarCollectionQueryParams,
            localVarPostBody,
            localVarHeaderParams,
            localVarFormParams,
            localVarAccept,
            localVarContentType,
            localVarAuthNames,
            localVarReturnType);
    return new ApiResponse(
        apiClient.getStatusCode(), apiClient.getResponseHeaders(), localVarResponse);
  }

  /**
   * Adds user Signature and initials images to a Signature.. Adds a user signature image and/or
   * user initials image to the specified user. The userId property specified in the endpoint must
   * match the authenticated user's userId and the user must be a member of the account. The
   * rules and processes associated with this are: * If Content-Type is set to application/json,
   * then the default behavior for creating a default signature image, based on the name and a
   * DocuSign font, is used. * If Content-Type is set to multipart/form-data, then the request must
   * contain a first part with the user signature information, followed by parts that contain the
   * images. For each Image part, the Content-Disposition header has a \"filename\" value
   * that is used to map to the `signatureName` and/or `signatureInitials`
   * properties in the JSON to the image. For example: `Content-Disposition: file;
   * filename=\"Ron Test20121127083900\"` If no matching image (by filename
   * value) is found, then the image is not set. One, both, or neither of the signature and initials
   * images can be set with this call. The Content-Transfer-Encoding: base64 header, set in the
   * header for the part containing the image, can be set to indicate that the images are formatted
   * as base64 instead of as binary. If successful, 200-OK is returned, and a JSON structure
   * containing the signature information is provided, note that the signatureId can change with
   * each API POST, PUT, or DELETE since the changes to the signature structure cause the current
   * signature to be closed, and a new signature record to be created.
   *
   * @param accountId The external account number (int) or account ID Guid. (required)
   * @param userId The user ID of the user being accessed. Generally this is the user ID of the
   *     authenticated user, but if the authenticated user is an Admin on the account, this may be
   *     another user the Admin user is accessing. (required)
   * @param userSignaturesInformation (optional)
   * @return UserSignaturesInformation
   * @throws ApiException if fails to make API call
   */
  public UserSignaturesInformation createSignatures(
      String accountId, String userId, UserSignaturesInformation userSignaturesInformation)
      throws ApiException {
    ApiResponse localVarResponse =
        createSignaturesWithHttpInfo(accountId, userId, userSignaturesInformation);
    return localVarResponse.getData();
  }

  /**
   * Adds user Signature and initials images to a Signature. Adds a user signature image and/or user
   * initials image to the specified user. The userId property specified in the endpoint must match
   * the authenticated user's userId and the user must be a member of the account. The rules and
   * processes associated with this are: * If Content-Type is set to application/json, then the
   * default behavior for creating a default signature image, based on the name and a DocuSign font,
   * is used. * If Content-Type is set to multipart/form-data, then the request must contain a first
   * part with the user signature information, followed by parts that contain the images. For each
   * Image part, the Content-Disposition header has a \"filename\" value that is used to
   * map to the `signatureName` and/or `signatureInitials` properties in the
   * JSON to the image. For example: `Content-Disposition: file; filename=\"Ron
   * Test20121127083900\"` If no matching image (by filename value) is found, then the
   * image is not set. One, both, or neither of the signature and initials images can be set with
   * this call. The Content-Transfer-Encoding: base64 header, set in the header for the part
   * containing the image, can be set to indicate that the images are formatted as base64 instead of
   * as binary. If successful, 200-OK is returned, and a JSON structure containing the signature
   * information is provided, note that the signatureId can change with each API POST, PUT, or
   * DELETE since the changes to the signature structure cause the current signature to be closed,
   * and a new signature record to be created.
   *
   * @param accountId The external account number (int) or account ID Guid. (required)
   * @param userId The user ID of the user being accessed. Generally this is the user ID of the
   *     authenticated user, but if the authenticated user is an Admin on the account, this may be
   *     another user the Admin user is accessing. (required)
   * @param userSignaturesInformation (optional)
   * @return UserSignaturesInformation
   * @throws ApiException if fails to make API call
   */
  public ApiResponse createSignaturesWithHttpInfo(
      String accountId, String userId, UserSignaturesInformation userSignaturesInformation)
      throws ApiException {
    Object localVarPostBody = userSignaturesInformation;

    // verify the required parameter 'accountId' is set
    if (accountId == null) {
      throw new ApiException(
          400, "Missing the required parameter 'accountId' when calling createSignatures");
    }

    // verify the required parameter 'userId' is set
    if (userId == null) {
      throw new ApiException(
          400, "Missing the required parameter 'userId' when calling createSignatures");
    }

    // create path and map variables
    String localVarPath =
        "/v2.1/accounts/{accountId}/users/{userId}/signatures"
            .replaceAll("\\{" + "accountId" + "\\}", apiClient.escapeString(accountId.toString()))
            .replaceAll("\\{" + "userId" + "\\}", apiClient.escapeString(userId.toString()));

    // query params
    java.util.List localVarQueryParams = new java.util.ArrayList();
    java.util.List localVarCollectionQueryParams = new java.util.ArrayList();
    java.util.Map localVarHeaderParams = new java.util.HashMap();
    java.util.Map localVarFormParams = new java.util.HashMap();

    final String[] localVarAccepts = {"application/json"};
    final String localVarAccept = apiClient.selectHeaderAccept(localVarAccepts);

    final String[] localVarContentTypes = {};

    final String localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes);

    String[] localVarAuthNames = new String[] {"docusignAccessCode"};

    GenericType localVarReturnType =
        new GenericType() {};
    UserSignaturesInformation localVarResponse =
        apiClient.invokeAPI(
            localVarPath,
            "POST",
            localVarQueryParams,
            localVarCollectionQueryParams,
            localVarPostBody,
            localVarHeaderParams,
            localVarFormParams,
            localVarAccept,
            localVarContentType,
            localVarAuthNames,
            localVarReturnType);
    return new ApiResponse(
        apiClient.getStatusCode(), apiClient.getResponseHeaders(), localVarResponse);
  }
  /// 
  /// Removes users account privileges. This closes one or more user records in the account. Users
  // are never deleted from an account, but closing a user prevents them from using account
  // functions.  The response returns whether the API execution was successful (200 - OK) or  if it
  // failed. The response contains a user structure similar to the request and includes the user
  // changes. If an error occurred during the DELETE operation for any of the users, the response
  // for that user contains an `errorDetails` node with `errorCode` and
  // `message` properties.
  /// 

  /** DeleteOptions Class. */
  public class DeleteOptions {
    private String delete = null;

    /** setDelete method. */
    public void setDelete(String delete) {
      this.delete = delete;
    }

    /**
     * getDelete method.
     *
     * @return String
     */
    public String getDelete() {
      return this.delete;
    }
  }

  /**
   * Removes users account privileges.. This closes one or more user records in the account. Users
   * are never deleted from an account, but closing a user prevents them from using account
   * functions. The response returns whether the API execution was successful (200 - OK) or if it
   * failed. The response contains a user structure similar to the request and includes the user
   * changes. If an error occurred during the DELETE operation for any of the users, the response
   * for that user contains an `errorDetails` node with `errorCode` and
   * `message` properties.
   *
   * @param accountId The external account number (int) or account ID Guid. (required)
   * @param userInfoList (optional)
   * @return UsersResponse
   */
  public UsersResponse delete(String accountId, UserInfoList userInfoList) throws ApiException {
    return delete(accountId, userInfoList, null);
  }

  /**
   * Removes users account privileges.. This closes one or more user records in the account. Users
   * are never deleted from an account, but closing a user prevents them from using account
   * functions. The response returns whether the API execution was successful (200 - OK) or if it
   * failed. The response contains a user structure similar to the request and includes the user
   * changes. If an error occurred during the DELETE operation for any of the users, the response
   * for that user contains an `errorDetails` node with `errorCode` and
   * `message` properties.
   *
   * @param accountId The external account number (int) or account ID Guid. (required)
   * @param userInfoList (optional)
   * @param options for modifying the method behavior.
   * @return UsersResponse
   * @throws ApiException if fails to make API call
   */
  public UsersResponse delete(
      String accountId, UserInfoList userInfoList, UsersApi.DeleteOptions options)
      throws ApiException {
    ApiResponse localVarResponse =
        deleteWithHttpInfo(accountId, userInfoList, options);
    return localVarResponse.getData();
  }

  /**
   * Removes users account privileges. This closes one or more user records in the account. Users
   * are never deleted from an account, but closing a user prevents them from using account
   * functions. The response returns whether the API execution was successful (200 - OK) or if it
   * failed. The response contains a user structure similar to the request and includes the user
   * changes. If an error occurred during the DELETE operation for any of the users, the response
   * for that user contains an `errorDetails` node with `errorCode` and
   * `message` properties.
   *
   * @param accountId The external account number (int) or account ID Guid. (required)
   * @param userInfoList (optional)
   * @param options for modifying the method behavior.
   * @return UsersResponse
   * @throws ApiException if fails to make API call
   */
  public ApiResponse deleteWithHttpInfo(
      String accountId, UserInfoList userInfoList, UsersApi.DeleteOptions options)
      throws ApiException {
    Object localVarPostBody = userInfoList;

    // verify the required parameter 'accountId' is set
    if (accountId == null) {
      throw new ApiException(400, "Missing the required parameter 'accountId' when calling delete");
    }

    // create path and map variables
    String localVarPath =
        "/v2.1/accounts/{accountId}/users"
            .replaceAll("\\{" + "accountId" + "\\}", apiClient.escapeString(accountId.toString()));

    // query params
    java.util.List localVarQueryParams = new java.util.ArrayList();
    java.util.List localVarCollectionQueryParams = new java.util.ArrayList();
    java.util.Map localVarHeaderParams = new java.util.HashMap();
    java.util.Map localVarFormParams = new java.util.HashMap();

    if (options != null) {
      localVarQueryParams.addAll(apiClient.parameterToPair("delete", options.delete));
    }

    final String[] localVarAccepts = {"application/json"};
    final String localVarAccept = apiClient.selectHeaderAccept(localVarAccepts);

    final String[] localVarContentTypes = {};

    final String localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes);

    String[] localVarAuthNames = new String[] {"docusignAccessCode"};

    GenericType localVarReturnType = new GenericType() {};
    UsersResponse localVarResponse =
        apiClient.invokeAPI(
            localVarPath,
            "DELETE",
            localVarQueryParams,
            localVarCollectionQueryParams,
            localVarPostBody,
            localVarHeaderParams,
            localVarFormParams,
            localVarAccept,
            localVarContentType,
            localVarAuthNames,
            localVarReturnType);
    return new ApiResponse(
        apiClient.getStatusCode(), apiClient.getResponseHeaders(), localVarResponse);
  }

  /**
   * Replaces a particular contact associated with an account for the DocuSign service.. This method
   * deletes a contact associated with an account.
   *
   * @param accountId The external account number (int) or account ID Guid. (required)
   * @param contactId The unique identifier of a person in the contacts address book. (required)
   * @return ContactUpdateResponse
   * @throws ApiException if fails to make API call
   */
  public ContactUpdateResponse deleteContactWithId(String accountId, String contactId)
      throws ApiException {
    ApiResponse localVarResponse =
        deleteContactWithIdWithHttpInfo(accountId, contactId);
    return localVarResponse.getData();
  }

  /**
   * Replaces a particular contact associated with an account for the DocuSign service. This method
   * deletes a contact associated with an account.
   *
   * @param accountId The external account number (int) or account ID Guid. (required)
   * @param contactId The unique identifier of a person in the contacts address book. (required)
   * @return ContactUpdateResponse
   * @throws ApiException if fails to make API call
   */
  public ApiResponse deleteContactWithIdWithHttpInfo(
      String accountId, String contactId) throws ApiException {
    Object localVarPostBody = "{}";

    // verify the required parameter 'accountId' is set
    if (accountId == null) {
      throw new ApiException(
          400, "Missing the required parameter 'accountId' when calling deleteContactWithId");
    }

    // verify the required parameter 'contactId' is set
    if (contactId == null) {
      throw new ApiException(
          400, "Missing the required parameter 'contactId' when calling deleteContactWithId");
    }

    // create path and map variables
    String localVarPath =
        "/v2.1/accounts/{accountId}/contacts/{contactId}"
            .replaceAll("\\{" + "accountId" + "\\}", apiClient.escapeString(accountId.toString()))
            .replaceAll("\\{" + "contactId" + "\\}", apiClient.escapeString(contactId.toString()));

    // query params
    java.util.List localVarQueryParams = new java.util.ArrayList();
    java.util.List localVarCollectionQueryParams = new java.util.ArrayList();
    java.util.Map localVarHeaderParams = new java.util.HashMap();
    java.util.Map localVarFormParams = new java.util.HashMap();

    final String[] localVarAccepts = {"application/json"};
    final String localVarAccept = apiClient.selectHeaderAccept(localVarAccepts);

    final String[] localVarContentTypes = {};

    final String localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes);

    String[] localVarAuthNames = new String[] {"docusignAccessCode"};

    GenericType localVarReturnType =
        new GenericType() {};
    ContactUpdateResponse localVarResponse =
        apiClient.invokeAPI(
            localVarPath,
            "DELETE",
            localVarQueryParams,
            localVarCollectionQueryParams,
            localVarPostBody,
            localVarHeaderParams,
            localVarFormParams,
            localVarAccept,
            localVarContentType,
            localVarAuthNames,
            localVarReturnType);
    return new ApiResponse(
        apiClient.getStatusCode(), apiClient.getResponseHeaders(), localVarResponse);
  }

  /**
   * Delete contacts associated with an account for the DocuSign service.. This method deletes
   * multiple contacts associated with an account.
   *
   * @param accountId The external account number (int) or account ID Guid. (required)
   * @param contactModRequest (optional)
   * @return ContactUpdateResponse
   * @throws ApiException if fails to make API call
   */
  public ContactUpdateResponse deleteContacts(String accountId, ContactModRequest contactModRequest)
      throws ApiException {
    ApiResponse localVarResponse =
        deleteContactsWithHttpInfo(accountId, contactModRequest);
    return localVarResponse.getData();
  }

  /**
   * Delete contacts associated with an account for the DocuSign service. This method deletes
   * multiple contacts associated with an account.
   *
   * @param accountId The external account number (int) or account ID Guid. (required)
   * @param contactModRequest (optional)
   * @return ContactUpdateResponse
   * @throws ApiException if fails to make API call
   */
  public ApiResponse deleteContactsWithHttpInfo(
      String accountId, ContactModRequest contactModRequest) throws ApiException {
    Object localVarPostBody = contactModRequest;

    // verify the required parameter 'accountId' is set
    if (accountId == null) {
      throw new ApiException(
          400, "Missing the required parameter 'accountId' when calling deleteContacts");
    }

    // create path and map variables
    String localVarPath =
        "/v2.1/accounts/{accountId}/contacts"
            .replaceAll("\\{" + "accountId" + "\\}", apiClient.escapeString(accountId.toString()));

    // query params
    java.util.List localVarQueryParams = new java.util.ArrayList();
    java.util.List localVarCollectionQueryParams = new java.util.ArrayList();
    java.util.Map localVarHeaderParams = new java.util.HashMap();
    java.util.Map localVarFormParams = new java.util.HashMap();

    final String[] localVarAccepts = {"application/json"};
    final String localVarAccept = apiClient.selectHeaderAccept(localVarAccepts);

    final String[] localVarContentTypes = {};

    final String localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes);

    String[] localVarAuthNames = new String[] {"docusignAccessCode"};

    GenericType localVarReturnType =
        new GenericType() {};
    ContactUpdateResponse localVarResponse =
        apiClient.invokeAPI(
            localVarPath,
            "DELETE",
            localVarQueryParams,
            localVarCollectionQueryParams,
            localVarPostBody,
            localVarHeaderParams,
            localVarFormParams,
            localVarAccept,
            localVarContentType,
            localVarAuthNames,
            localVarReturnType);
    return new ApiResponse(
        apiClient.getStatusCode(), apiClient.getResponseHeaders(), localVarResponse);
  }

  /**
   * Deletes custom user settings for a specified user.. Deletes the specified custom user settings
   * for a single user. ###Deleting Grouped Custom User Settings### If the custom user settings you
   * want to delete are grouped, you must include the following information in the header, after
   * Content-Type, in the request: `X-DocuSign-User-Settings-Key:group_name` Where the
   * `group_name` is your designated name for the group of customer user settings. If the
   * extra header information is not included, only the custom user settings that were added without
   * a group are deleted.
   *
   * @param accountId The external account number (int) or account ID Guid. (required)
   * @param userId The user ID of the user being accessed. Generally this is the user ID of the
   *     authenticated user, but if the authenticated user is an Admin on the account, this may be
   *     another user the Admin user is accessing. (required)
   * @param customSettingsInformation (optional)
   * @return CustomSettingsInformation
   * @throws ApiException if fails to make API call
   */
  public CustomSettingsInformation deleteCustomSettings(
      String accountId, String userId, CustomSettingsInformation customSettingsInformation)
      throws ApiException {
    ApiResponse localVarResponse =
        deleteCustomSettingsWithHttpInfo(accountId, userId, customSettingsInformation);
    return localVarResponse.getData();
  }

  /**
   * Deletes custom user settings for a specified user. Deletes the specified custom user settings
   * for a single user. ###Deleting Grouped Custom User Settings### If the custom user settings you
   * want to delete are grouped, you must include the following information in the header, after
   * Content-Type, in the request: `X-DocuSign-User-Settings-Key:group_name` Where the
   * `group_name` is your designated name for the group of customer user settings. If the
   * extra header information is not included, only the custom user settings that were added without
   * a group are deleted.
   *
   * @param accountId The external account number (int) or account ID Guid. (required)
   * @param userId The user ID of the user being accessed. Generally this is the user ID of the
   *     authenticated user, but if the authenticated user is an Admin on the account, this may be
   *     another user the Admin user is accessing. (required)
   * @param customSettingsInformation (optional)
   * @return CustomSettingsInformation
   * @throws ApiException if fails to make API call
   */
  public ApiResponse deleteCustomSettingsWithHttpInfo(
      String accountId, String userId, CustomSettingsInformation customSettingsInformation)
      throws ApiException {
    Object localVarPostBody = customSettingsInformation;

    // verify the required parameter 'accountId' is set
    if (accountId == null) {
      throw new ApiException(
          400, "Missing the required parameter 'accountId' when calling deleteCustomSettings");
    }

    // verify the required parameter 'userId' is set
    if (userId == null) {
      throw new ApiException(
          400, "Missing the required parameter 'userId' when calling deleteCustomSettings");
    }

    // create path and map variables
    String localVarPath =
        "/v2.1/accounts/{accountId}/users/{userId}/custom_settings"
            .replaceAll("\\{" + "accountId" + "\\}", apiClient.escapeString(accountId.toString()))
            .replaceAll("\\{" + "userId" + "\\}", apiClient.escapeString(userId.toString()));

    // query params
    java.util.List localVarQueryParams = new java.util.ArrayList();
    java.util.List localVarCollectionQueryParams = new java.util.ArrayList();
    java.util.Map localVarHeaderParams = new java.util.HashMap();
    java.util.Map localVarFormParams = new java.util.HashMap();

    final String[] localVarAccepts = {"application/json"};
    final String localVarAccept = apiClient.selectHeaderAccept(localVarAccepts);

    final String[] localVarContentTypes = {};

    final String localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes);

    String[] localVarAuthNames = new String[] {"docusignAccessCode"};

    GenericType localVarReturnType =
        new GenericType() {};
    CustomSettingsInformation localVarResponse =
        apiClient.invokeAPI(
            localVarPath,
            "DELETE",
            localVarQueryParams,
            localVarCollectionQueryParams,
            localVarPostBody,
            localVarHeaderParams,
            localVarFormParams,
            localVarAccept,
            localVarContentType,
            localVarAuthNames,
            localVarReturnType);
    return new ApiResponse(
        apiClient.getStatusCode(), apiClient.getResponseHeaders(), localVarResponse);
  }

  /**
   * Deletes the user profile image for the specified user.. Deletes the user profile image from the
   * specified user's profile. The userId parameter specified in the endpoint must match the
   * authenticated user's user ID and the user must be a member of the specified account.
   *
   * @param accountId The external account number (int) or account ID Guid. (required)
   * @param userId The user ID of the user being accessed. Generally this is the user ID of the
   *     authenticated user, but if the authenticated user is an Admin on the account, this may be
   *     another user the Admin user is accessing. (required)
   * @throws ApiException if fails to make API call
   */
  public void deleteProfileImage(String accountId, String userId) throws ApiException {
    deleteProfileImageWithHttpInfo(accountId, userId);
  }

  /**
   * Deletes the user profile image for the specified user. Deletes the user profile image from the
   * specified user's profile. The userId parameter specified in the endpoint must match the
   * authenticated user's user ID and the user must be a member of the specified account.
   *
   * @param accountId The external account number (int) or account ID Guid. (required)
   * @param userId The user ID of the user being accessed. Generally this is the user ID of the
   *     authenticated user, but if the authenticated user is an Admin on the account, this may be
   *     another user the Admin user is accessing. (required)
   * @throws ApiException if fails to make API call
   */
  public ApiResponse deleteProfileImageWithHttpInfo(String accountId, String userId)
      throws ApiException {
    Object localVarPostBody = "{}";

    // verify the required parameter 'accountId' is set
    if (accountId == null) {
      throw new ApiException(
          400, "Missing the required parameter 'accountId' when calling deleteProfileImage");
    }

    // verify the required parameter 'userId' is set
    if (userId == null) {
      throw new ApiException(
          400, "Missing the required parameter 'userId' when calling deleteProfileImage");
    }

    // create path and map variables
    String localVarPath =
        "/v2.1/accounts/{accountId}/users/{userId}/profile/image"
            .replaceAll("\\{" + "accountId" + "\\}", apiClient.escapeString(accountId.toString()))
            .replaceAll("\\{" + "userId" + "\\}", apiClient.escapeString(userId.toString()));

    // query params
    java.util.List localVarQueryParams = new java.util.ArrayList();
    java.util.List localVarCollectionQueryParams = new java.util.ArrayList();
    java.util.Map localVarHeaderParams = new java.util.HashMap();
    java.util.Map localVarFormParams = new java.util.HashMap();

    final String[] localVarAccepts = {"application/json"};
    final String localVarAccept = apiClient.selectHeaderAccept(localVarAccepts);

    final String[] localVarContentTypes = {};

    final String localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes);

    String[] localVarAuthNames = new String[] {"docusignAccessCode"};

    apiClient.invokeAPI(
        localVarPath,
        "DELETE",
        localVarQueryParams,
        localVarCollectionQueryParams,
        localVarPostBody,
        localVarHeaderParams,
        localVarFormParams,
        localVarAccept,
        localVarContentType,
        localVarAuthNames,
        null);
    return new ApiResponse(apiClient.getStatusCode(), apiClient.getResponseHeaders(), null);
  }

  /**
   * Removes removes signature information for the specified user.. Removes the signature
   * information for the user. The userId parameter specified in the endpoint must match the
   * authenticated user's user ID and the user must be a member of the account. The
   * `signatureId` accepts a signature ID or a signature name. DocuSign recommends you use
   * signature ID (`signatureId`), since some names contain characters that do not
   * properly encode into a URL. If you use the user name, it is likely that the name includes
   * spaces. In that case, URL encode the name before using it in the endpoint. For example encode
   * \"Bob Smith\" as \"Bob%20Smith\".
   *
   * @param accountId The external account number (int) or account ID Guid. (required)
   * @param userId The user ID of the user being accessed. Generally this is the user ID of the
   *     authenticated user, but if the authenticated user is an Admin on the account, this may be
   *     another user the Admin user is accessing. (required)
   * @param signatureId The ID of the signature being accessed. (required)
   * @throws ApiException if fails to make API call
   */
  public void deleteSignature(String accountId, String userId, String signatureId)
      throws ApiException {
    deleteSignatureWithHttpInfo(accountId, userId, signatureId);
  }

  /**
   * Removes removes signature information for the specified user. Removes the signature information
   * for the user. The userId parameter specified in the endpoint must match the authenticated
   * user's user ID and the user must be a member of the account. The `signatureId`
   * accepts a signature ID or a signature name. DocuSign recommends you use signature ID
   * (`signatureId`), since some names contain characters that do not properly encode into
   * a URL. If you use the user name, it is likely that the name includes spaces. In that case, URL
   * encode the name before using it in the endpoint. For example encode \"Bob Smith\" as
   * \"Bob%20Smith\".
   *
   * @param accountId The external account number (int) or account ID Guid. (required)
   * @param userId The user ID of the user being accessed. Generally this is the user ID of the
   *     authenticated user, but if the authenticated user is an Admin on the account, this may be
   *     another user the Admin user is accessing. (required)
   * @param signatureId The ID of the signature being accessed. (required)
   * @throws ApiException if fails to make API call
   */
  public ApiResponse deleteSignatureWithHttpInfo(
      String accountId, String userId, String signatureId) throws ApiException {
    Object localVarPostBody = "{}";

    // verify the required parameter 'accountId' is set
    if (accountId == null) {
      throw new ApiException(
          400, "Missing the required parameter 'accountId' when calling deleteSignature");
    }

    // verify the required parameter 'userId' is set
    if (userId == null) {
      throw new ApiException(
          400, "Missing the required parameter 'userId' when calling deleteSignature");
    }

    // verify the required parameter 'signatureId' is set
    if (signatureId == null) {
      throw new ApiException(
          400, "Missing the required parameter 'signatureId' when calling deleteSignature");
    }

    // create path and map variables
    String localVarPath =
        "/v2.1/accounts/{accountId}/users/{userId}/signatures/{signatureId}"
            .replaceAll("\\{" + "accountId" + "\\}", apiClient.escapeString(accountId.toString()))
            .replaceAll("\\{" + "userId" + "\\}", apiClient.escapeString(userId.toString()))
            .replaceAll(
                "\\{" + "signatureId" + "\\}", apiClient.escapeString(signatureId.toString()));

    // query params
    java.util.List localVarQueryParams = new java.util.ArrayList();
    java.util.List localVarCollectionQueryParams = new java.util.ArrayList();
    java.util.Map localVarHeaderParams = new java.util.HashMap();
    java.util.Map localVarFormParams = new java.util.HashMap();

    final String[] localVarAccepts = {"application/json"};
    final String localVarAccept = apiClient.selectHeaderAccept(localVarAccepts);

    final String[] localVarContentTypes = {};

    final String localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes);

    String[] localVarAuthNames = new String[] {"docusignAccessCode"};

    apiClient.invokeAPI(
        localVarPath,
        "DELETE",
        localVarQueryParams,
        localVarCollectionQueryParams,
        localVarPostBody,
        localVarHeaderParams,
        localVarFormParams,
        localVarAccept,
        localVarContentType,
        localVarAuthNames,
        null);
    return new ApiResponse(apiClient.getStatusCode(), apiClient.getResponseHeaders(), null);
  }

  /**
   * Deletes the user initials image or the user signature image for the specified user.. Deletes
   * the specified initials image or signature image for the specified user. The function deletes
   * one or the other of the image types, to delete both the initials image and signature image you
   * must call the endpoint twice. The userId parameter specified in the endpoint must match the
   * authenticated user's user ID and the user must be a member of the account. The
   * `signatureId` parameter accepts a signature ID or a signature name. DocuSign
   * recommends you use signature ID (`signatureId`), since some names contain characters
   * that do not properly encode into a URL. If you use the user name, it is likely that the name
   * includes spaces. In that case, URL encode the name before using it in the endpoint. For example
   * encode \"Bob Smith\" as \"Bob%20Smith\".
   *
   * @param accountId The external account number (int) or account ID Guid. (required)
   * @param userId The user ID of the user being accessed. Generally this is the user ID of the
   *     authenticated user, but if the authenticated user is an Admin on the account, this may be
   *     another user the Admin user is accessing. (required)
   * @param signatureId The ID of the signature being accessed. (required)
   * @param imageType One of **signature_image** or **initials_image**. (required)
   * @return UserSignature
   * @throws ApiException if fails to make API call
   */
  public UserSignature deleteSignatureImage(
      String accountId, String userId, String signatureId, String imageType) throws ApiException {
    ApiResponse localVarResponse =
        deleteSignatureImageWithHttpInfo(accountId, userId, signatureId, imageType);
    return localVarResponse.getData();
  }

  /**
   * Deletes the user initials image or the user signature image for the specified user. Deletes the
   * specified initials image or signature image for the specified user. The function deletes one or
   * the other of the image types, to delete both the initials image and signature image you must
   * call the endpoint twice. The userId parameter specified in the endpoint must match the
   * authenticated user's user ID and the user must be a member of the account. The
   * `signatureId` parameter accepts a signature ID or a signature name. DocuSign
   * recommends you use signature ID (`signatureId`), since some names contain characters
   * that do not properly encode into a URL. If you use the user name, it is likely that the name
   * includes spaces. In that case, URL encode the name before using it in the endpoint. For example
   * encode \"Bob Smith\" as \"Bob%20Smith\".
   *
   * @param accountId The external account number (int) or account ID Guid. (required)
   * @param userId The user ID of the user being accessed. Generally this is the user ID of the
   *     authenticated user, but if the authenticated user is an Admin on the account, this may be
   *     another user the Admin user is accessing. (required)
   * @param signatureId The ID of the signature being accessed. (required)
   * @param imageType One of **signature_image** or **initials_image**. (required)
   * @return UserSignature
   * @throws ApiException if fails to make API call
   */
  public ApiResponse deleteSignatureImageWithHttpInfo(
      String accountId, String userId, String signatureId, String imageType) throws ApiException {
    Object localVarPostBody = "{}";

    // verify the required parameter 'accountId' is set
    if (accountId == null) {
      throw new ApiException(
          400, "Missing the required parameter 'accountId' when calling deleteSignatureImage");
    }

    // verify the required parameter 'userId' is set
    if (userId == null) {
      throw new ApiException(
          400, "Missing the required parameter 'userId' when calling deleteSignatureImage");
    }

    // verify the required parameter 'signatureId' is set
    if (signatureId == null) {
      throw new ApiException(
          400, "Missing the required parameter 'signatureId' when calling deleteSignatureImage");
    }

    // verify the required parameter 'imageType' is set
    if (imageType == null) {
      throw new ApiException(
          400, "Missing the required parameter 'imageType' when calling deleteSignatureImage");
    }

    // create path and map variables
    String localVarPath =
        "/v2.1/accounts/{accountId}/users/{userId}/signatures/{signatureId}/{imageType}"
            .replaceAll("\\{" + "accountId" + "\\}", apiClient.escapeString(accountId.toString()))
            .replaceAll("\\{" + "userId" + "\\}", apiClient.escapeString(userId.toString()))
            .replaceAll(
                "\\{" + "signatureId" + "\\}", apiClient.escapeString(signatureId.toString()))
            .replaceAll("\\{" + "imageType" + "\\}", apiClient.escapeString(imageType.toString()));

    // query params
    java.util.List localVarQueryParams = new java.util.ArrayList();
    java.util.List localVarCollectionQueryParams = new java.util.ArrayList();
    java.util.Map localVarHeaderParams = new java.util.HashMap();
    java.util.Map localVarFormParams = new java.util.HashMap();

    final String[] localVarAccepts = {"application/json"};
    final String localVarAccept = apiClient.selectHeaderAccept(localVarAccepts);

    final String[] localVarContentTypes = {};

    final String localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes);

    String[] localVarAuthNames = new String[] {"docusignAccessCode"};

    GenericType localVarReturnType = new GenericType() {};
    UserSignature localVarResponse =
        apiClient.invokeAPI(
            localVarPath,
            "DELETE",
            localVarQueryParams,
            localVarCollectionQueryParams,
            localVarPostBody,
            localVarHeaderParams,
            localVarFormParams,
            localVarAccept,
            localVarContentType,
            localVarAuthNames,
            localVarReturnType);
    return new ApiResponse(
        apiClient.getStatusCode(), apiClient.getResponseHeaders(), localVarResponse);
  }
  /// 
  /// Gets a particular contact associated with the user's account. This method returns one or
  // more contacts associated with a DocuSign account. You can also retrieve contacts from connected
  // [cloud storage][CloudStorage] providers by using the `cloud_provider` query
  // parameter. By default, contacts are retrieved from the DocuSign account's default address
  // book.  To return a specific contact, use the `contactId` query parameter. To return
  // all contacts associated with an account, omit this parameter.  [CloudStorage]:
  // /docs/esign-rest-api/reference/cloudstorage/
  /// 

  /** GetContactByIdOptions Class. */
  public class GetContactByIdOptions {
    private String cloudProvider = null;

    /** setCloudProvider method. */
    public void setCloudProvider(String cloudProvider) {
      this.cloudProvider = cloudProvider;
    }

    /**
     * getCloudProvider method.
     *
     * @return String
     */
    public String getCloudProvider() {
      return this.cloudProvider;
    }
  }

  /**
   * Gets a particular contact associated with the user's account.. This method returns one or
   * more contacts associated with a DocuSign account. You can also retrieve contacts from connected
   * [cloud storage][CloudStorage] providers by using the `cloud_provider` query
   * parameter. By default, contacts are retrieved from the DocuSign account's default address
   * book. To return a specific contact, use the `contactId` query parameter. To return
   * all contacts associated with an account, omit this parameter. [CloudStorage]:
   * /docs/esign-rest-api/reference/cloudstorage/
   *
   * @param accountId The external account number (int) or account ID Guid. (required)
   * @param contactId The unique identifier of a person in the contacts address book. (required)
   * @return ContactGetResponse
   */
  public ContactGetResponse getContactById(String accountId, String contactId) throws ApiException {
    return getContactById(accountId, contactId, null);
  }

  /**
   * Gets a particular contact associated with the user's account.. This method returns one or
   * more contacts associated with a DocuSign account. You can also retrieve contacts from connected
   * [cloud storage][CloudStorage] providers by using the `cloud_provider` query
   * parameter. By default, contacts are retrieved from the DocuSign account's default address
   * book. To return a specific contact, use the `contactId` query parameter. To return
   * all contacts associated with an account, omit this parameter. [CloudStorage]:
   * /docs/esign-rest-api/reference/cloudstorage/
   *
   * @param accountId The external account number (int) or account ID Guid. (required)
   * @param contactId The unique identifier of a person in the contacts address book. (required)
   * @param options for modifying the method behavior.
   * @return ContactGetResponse
   * @throws ApiException if fails to make API call
   */
  public ContactGetResponse getContactById(
      String accountId, String contactId, UsersApi.GetContactByIdOptions options)
      throws ApiException {
    ApiResponse localVarResponse =
        getContactByIdWithHttpInfo(accountId, contactId, options);
    return localVarResponse.getData();
  }

  /**
   * Gets a particular contact associated with the user's account. This method returns one or
   * more contacts associated with a DocuSign account. You can also retrieve contacts from connected
   * [cloud storage][CloudStorage] providers by using the `cloud_provider` query
   * parameter. By default, contacts are retrieved from the DocuSign account's default address
   * book. To return a specific contact, use the `contactId` query parameter. To return
   * all contacts associated with an account, omit this parameter. [CloudStorage]:
   * /docs/esign-rest-api/reference/cloudstorage/
   *
   * @param accountId The external account number (int) or account ID Guid. (required)
   * @param contactId The unique identifier of a person in the contacts address book. (required)
   * @param options for modifying the method behavior.
   * @return ContactGetResponse
   * @throws ApiException if fails to make API call
   */
  public ApiResponse getContactByIdWithHttpInfo(
      String accountId, String contactId, UsersApi.GetContactByIdOptions options)
      throws ApiException {
    Object localVarPostBody = "{}";

    // verify the required parameter 'accountId' is set
    if (accountId == null) {
      throw new ApiException(
          400, "Missing the required parameter 'accountId' when calling getContactById");
    }

    // verify the required parameter 'contactId' is set
    if (contactId == null) {
      throw new ApiException(
          400, "Missing the required parameter 'contactId' when calling getContactById");
    }

    // create path and map variables
    String localVarPath =
        "/v2.1/accounts/{accountId}/contacts/{contactId}"
            .replaceAll("\\{" + "accountId" + "\\}", apiClient.escapeString(accountId.toString()))
            .replaceAll("\\{" + "contactId" + "\\}", apiClient.escapeString(contactId.toString()));

    // query params
    java.util.List localVarQueryParams = new java.util.ArrayList();
    java.util.List localVarCollectionQueryParams = new java.util.ArrayList();
    java.util.Map localVarHeaderParams = new java.util.HashMap();
    java.util.Map localVarFormParams = new java.util.HashMap();

    if (options != null) {
      localVarQueryParams.addAll(
          apiClient.parameterToPair("cloud_provider", options.cloudProvider));
    }

    final String[] localVarAccepts = {"application/json"};
    final String localVarAccept = apiClient.selectHeaderAccept(localVarAccepts);

    final String[] localVarContentTypes = {};

    final String localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes);

    String[] localVarAuthNames = new String[] {"docusignAccessCode"};

    GenericType localVarReturnType = new GenericType() {};
    ContactGetResponse localVarResponse =
        apiClient.invokeAPI(
            localVarPath,
            "GET",
            localVarQueryParams,
            localVarCollectionQueryParams,
            localVarPostBody,
            localVarHeaderParams,
            localVarFormParams,
            localVarAccept,
            localVarContentType,
            localVarAuthNames,
            localVarReturnType);
    return new ApiResponse(
        apiClient.getStatusCode(), apiClient.getResponseHeaders(), localVarResponse);
  }
  /// 
  /// Gets the user information for a specified user. Retrieves the user information for the
  // specified user.   To return additional user information that details the last login date, login
  // status, and the user's password expiration date, set the optional
  // `additional_info` query string parameter to **true**.
  /// 

  /** GetInformationOptions Class. */
  public class GetInformationOptions {
    private String additionalInfo = null;
    private String email = null;

    /** setAdditionalInfo method. */
    public void setAdditionalInfo(String additionalInfo) {
      this.additionalInfo = additionalInfo;
    }

    /**
     * getAdditionalInfo method.
     *
     * @return String
     */
    public String getAdditionalInfo() {
      return this.additionalInfo;
    }

    /** setEmail method. */
    public void setEmail(String email) {
      this.email = email;
    }

    /**
     * getEmail method.
     *
     * @return String
     */
    public String getEmail() {
      return this.email;
    }
  }

  /**
   * Gets the user information for a specified user.. Retrieves the user information for the
   * specified user. To return additional user information that details the last login date, login
   * status, and the user's password expiration date, set the optional
   * `additional_info` query string parameter to **true**.
   *
   * @param accountId The external account number (int) or account ID Guid. (required)
   * @param userId The user ID of the user being accessed. Generally this is the user ID of the
   *     authenticated user, but if the authenticated user is an Admin on the account, this may be
   *     another user the Admin user is accessing. (required)
   * @return UserInformation
   */
  public UserInformation getInformation(String accountId, String userId) throws ApiException {
    return getInformation(accountId, userId, null);
  }

  /**
   * Gets the user information for a specified user.. Retrieves the user information for the
   * specified user. To return additional user information that details the last login date, login
   * status, and the user's password expiration date, set the optional
   * `additional_info` query string parameter to **true**.
   *
   * @param accountId The external account number (int) or account ID Guid. (required)
   * @param userId The user ID of the user being accessed. Generally this is the user ID of the
   *     authenticated user, but if the authenticated user is an Admin on the account, this may be
   *     another user the Admin user is accessing. (required)
   * @param options for modifying the method behavior.
   * @return UserInformation
   * @throws ApiException if fails to make API call
   */
  public UserInformation getInformation(
      String accountId, String userId, UsersApi.GetInformationOptions options) throws ApiException {
    ApiResponse localVarResponse =
        getInformationWithHttpInfo(accountId, userId, options);
    return localVarResponse.getData();
  }

  /**
   * Gets the user information for a specified user. Retrieves the user information for the
   * specified user. To return additional user information that details the last login date, login
   * status, and the user's password expiration date, set the optional
   * `additional_info` query string parameter to **true**.
   *
   * @param accountId The external account number (int) or account ID Guid. (required)
   * @param userId The user ID of the user being accessed. Generally this is the user ID of the
   *     authenticated user, but if the authenticated user is an Admin on the account, this may be
   *     another user the Admin user is accessing. (required)
   * @param options for modifying the method behavior.
   * @return UserInformation
   * @throws ApiException if fails to make API call
   */
  public ApiResponse getInformationWithHttpInfo(
      String accountId, String userId, UsersApi.GetInformationOptions options) throws ApiException {
    Object localVarPostBody = "{}";

    // verify the required parameter 'accountId' is set
    if (accountId == null) {
      throw new ApiException(
          400, "Missing the required parameter 'accountId' when calling getInformation");
    }

    // verify the required parameter 'userId' is set
    if (userId == null) {
      throw new ApiException(
          400, "Missing the required parameter 'userId' when calling getInformation");
    }

    // create path and map variables
    String localVarPath =
        "/v2.1/accounts/{accountId}/users/{userId}"
            .replaceAll("\\{" + "accountId" + "\\}", apiClient.escapeString(accountId.toString()))
            .replaceAll("\\{" + "userId" + "\\}", apiClient.escapeString(userId.toString()));

    // query params
    java.util.List localVarQueryParams = new java.util.ArrayList();
    java.util.List localVarCollectionQueryParams = new java.util.ArrayList();
    java.util.Map localVarHeaderParams = new java.util.HashMap();
    java.util.Map localVarFormParams = new java.util.HashMap();

    if (options != null) {
      localVarQueryParams.addAll(
          apiClient.parameterToPair("additional_info", options.additionalInfo));
    }
    if (options != null) {
      localVarQueryParams.addAll(apiClient.parameterToPair("email", options.email));
    }

    final String[] localVarAccepts = {"application/json"};
    final String localVarAccept = apiClient.selectHeaderAccept(localVarAccepts);

    final String[] localVarContentTypes = {};

    final String localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes);

    String[] localVarAuthNames = new String[] {"docusignAccessCode"};

    GenericType localVarReturnType = new GenericType() {};
    UserInformation localVarResponse =
        apiClient.invokeAPI(
            localVarPath,
            "GET",
            localVarQueryParams,
            localVarCollectionQueryParams,
            localVarPostBody,
            localVarHeaderParams,
            localVarFormParams,
            localVarAccept,
            localVarContentType,
            localVarAuthNames,
            localVarReturnType);
    return new ApiResponse(
        apiClient.getStatusCode(), apiClient.getResponseHeaders(), localVarResponse);
  }

  /**
   * Retrieves the user profile for a specified user.. Retrieves the user profile information, the
   * privacy settings and personal information (address, phone number, etc.) for the specified user.
   * The userId parameter specified in the endpoint must match the authenticated user's user ID
   * and the user must be a member of the specified account.
   *
   * @param accountId The external account number (int) or account ID Guid. (required)
   * @param userId The user ID of the user being accessed. Generally this is the user ID of the
   *     authenticated user, but if the authenticated user is an Admin on the account, this may be
   *     another user the Admin user is accessing. (required)
   * @return UserProfile
   * @throws ApiException if fails to make API call
   */
  public UserProfile getProfile(String accountId, String userId) throws ApiException {
    ApiResponse localVarResponse = getProfileWithHttpInfo(accountId, userId);
    return localVarResponse.getData();
  }

  /**
   * Retrieves the user profile for a specified user. Retrieves the user profile information, the
   * privacy settings and personal information (address, phone number, etc.) for the specified user.
   * The userId parameter specified in the endpoint must match the authenticated user's user ID
   * and the user must be a member of the specified account.
   *
   * @param accountId The external account number (int) or account ID Guid. (required)
   * @param userId The user ID of the user being accessed. Generally this is the user ID of the
   *     authenticated user, but if the authenticated user is an Admin on the account, this may be
   *     another user the Admin user is accessing. (required)
   * @return UserProfile
   * @throws ApiException if fails to make API call
   */
  public ApiResponse getProfileWithHttpInfo(String accountId, String userId)
      throws ApiException {
    Object localVarPostBody = "{}";

    // verify the required parameter 'accountId' is set
    if (accountId == null) {
      throw new ApiException(
          400, "Missing the required parameter 'accountId' when calling getProfile");
    }

    // verify the required parameter 'userId' is set
    if (userId == null) {
      throw new ApiException(
          400, "Missing the required parameter 'userId' when calling getProfile");
    }

    // create path and map variables
    String localVarPath =
        "/v2.1/accounts/{accountId}/users/{userId}/profile"
            .replaceAll("\\{" + "accountId" + "\\}", apiClient.escapeString(accountId.toString()))
            .replaceAll("\\{" + "userId" + "\\}", apiClient.escapeString(userId.toString()));

    // query params
    java.util.List localVarQueryParams = new java.util.ArrayList();
    java.util.List localVarCollectionQueryParams = new java.util.ArrayList();
    java.util.Map localVarHeaderParams = new java.util.HashMap();
    java.util.Map localVarFormParams = new java.util.HashMap();

    final String[] localVarAccepts = {"application/json"};
    final String localVarAccept = apiClient.selectHeaderAccept(localVarAccepts);

    final String[] localVarContentTypes = {};

    final String localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes);

    String[] localVarAuthNames = new String[] {"docusignAccessCode"};

    GenericType localVarReturnType = new GenericType() {};
    UserProfile localVarResponse =
        apiClient.invokeAPI(
            localVarPath,
            "GET",
            localVarQueryParams,
            localVarCollectionQueryParams,
            localVarPostBody,
            localVarHeaderParams,
            localVarFormParams,
            localVarAccept,
            localVarContentType,
            localVarAuthNames,
            localVarReturnType);
    return new ApiResponse(
        apiClient.getStatusCode(), apiClient.getResponseHeaders(), localVarResponse);
  }
  /// 
  /// Retrieves the user profile image for the specified user. Retrieves the user profile picture
  // for the specified user. The image is returned in the same format as uploaded.  The userId
  // parameter specified in the endpoint must match the authenticated user's user ID and the
  // user must be a member of the specified account.  If successful, the response returns a 200 - OK
  // and the user profile image.
  /// 

  /** GetProfileImageOptions Class. */
  public class GetProfileImageOptions {
    private String encoding = null;

    /** setEncoding method. */
    public void setEncoding(String encoding) {
      this.encoding = encoding;
    }

    /**
     * getEncoding method.
     *
     * @return String
     */
    public String getEncoding() {
      return this.encoding;
    }
  }

  /**
   * Retrieves the user profile image for the specified user.. Retrieves the user profile picture
   * for the specified user. The image is returned in the same format as uploaded. The userId
   * parameter specified in the endpoint must match the authenticated user's user ID and the
   * user must be a member of the specified account. If successful, the response returns a 200 - OK
   * and the user profile image.
   *
   * @param accountId The external account number (int) or account ID Guid. (required)
   * @param userId The user ID of the user being accessed. Generally this is the user ID of the
   *     authenticated user, but if the authenticated user is an Admin on the account, this may be
   *     another user the Admin user is accessing. (required)
   * @return byte[]
   */
  public byte[] getProfileImage(String accountId, String userId) throws ApiException {
    return getProfileImage(accountId, userId, null);
  }

  /**
   * Retrieves the user profile image for the specified user.. Retrieves the user profile picture
   * for the specified user. The image is returned in the same format as uploaded. The userId
   * parameter specified in the endpoint must match the authenticated user's user ID and the
   * user must be a member of the specified account. If successful, the response returns a 200 - OK
   * and the user profile image.
   *
   * @param accountId The external account number (int) or account ID Guid. (required)
   * @param userId The user ID of the user being accessed. Generally this is the user ID of the
   *     authenticated user, but if the authenticated user is an Admin on the account, this may be
   *     another user the Admin user is accessing. (required)
   * @param options for modifying the method behavior.
   * @return byte[]
   * @throws ApiException if fails to make API call
   */
  public byte[] getProfileImage(
      String accountId, String userId, UsersApi.GetProfileImageOptions options)
      throws ApiException {
    ApiResponse localVarResponse = getProfileImageWithHttpInfo(accountId, userId, options);
    return localVarResponse.getData();
  }

  /**
   * Retrieves the user profile image for the specified user. Retrieves the user profile picture for
   * the specified user. The image is returned in the same format as uploaded. The userId parameter
   * specified in the endpoint must match the authenticated user's user ID and the user must be
   * a member of the specified account. If successful, the response returns a 200 - OK and the user
   * profile image.
   *
   * @param accountId The external account number (int) or account ID Guid. (required)
   * @param userId The user ID of the user being accessed. Generally this is the user ID of the
   *     authenticated user, but if the authenticated user is an Admin on the account, this may be
   *     another user the Admin user is accessing. (required)
   * @param options for modifying the method behavior.
   * @return byte[]
   * @throws ApiException if fails to make API call
   */
  public ApiResponse getProfileImageWithHttpInfo(
      String accountId, String userId, UsersApi.GetProfileImageOptions options)
      throws ApiException {
    Object localVarPostBody = "{}";

    // verify the required parameter 'accountId' is set
    if (accountId == null) {
      throw new ApiException(
          400, "Missing the required parameter 'accountId' when calling getProfileImage");
    }

    // verify the required parameter 'userId' is set
    if (userId == null) {
      throw new ApiException(
          400, "Missing the required parameter 'userId' when calling getProfileImage");
    }

    // create path and map variables
    String localVarPath =
        "/v2.1/accounts/{accountId}/users/{userId}/profile/image"
            .replaceAll("\\{" + "accountId" + "\\}", apiClient.escapeString(accountId.toString()))
            .replaceAll("\\{" + "userId" + "\\}", apiClient.escapeString(userId.toString()));

    // query params
    java.util.List localVarQueryParams = new java.util.ArrayList();
    java.util.List localVarCollectionQueryParams = new java.util.ArrayList();
    java.util.Map localVarHeaderParams = new java.util.HashMap();
    java.util.Map localVarFormParams = new java.util.HashMap();

    if (options != null) {
      localVarQueryParams.addAll(apiClient.parameterToPair("encoding", options.encoding));
    }

    final String[] localVarAccepts = {"image/gif"};
    final String localVarAccept = apiClient.selectHeaderAccept(localVarAccepts);

    final String[] localVarContentTypes = {};

    final String localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes);

    String[] localVarAuthNames = new String[] {"docusignAccessCode"};

    GenericType localVarReturnType = new GenericType() {};
    byte[] localVarResponse =
        apiClient.invokeAPI(
            localVarPath,
            "GET",
            localVarQueryParams,
            localVarCollectionQueryParams,
            localVarPostBody,
            localVarHeaderParams,
            localVarFormParams,
            localVarAccept,
            localVarContentType,
            localVarAuthNames,
            localVarReturnType);
    return new ApiResponse(
        apiClient.getStatusCode(), apiClient.getResponseHeaders(), localVarResponse);
  }

  /**
   * Gets the user account settings for a specified user.. Retrieves a list of the account settings
   * and email notification information for the specified user. The response returns the account
   * setting name/value information and the email notification settings for the specified user. For
   * more information about the different user settings, see the [ML:userSettings list].
   *
   * @param accountId The external account number (int) or account ID Guid. (required)
   * @param userId The user ID of the user being accessed. Generally this is the user ID of the
   *     authenticated user, but if the authenticated user is an Admin on the account, this may be
   *     another user the Admin user is accessing. (required)
   * @return UserSettingsInformation
   * @throws ApiException if fails to make API call
   */
  public UserSettingsInformation getSettings(String accountId, String userId) throws ApiException {
    ApiResponse localVarResponse =
        getSettingsWithHttpInfo(accountId, userId);
    return localVarResponse.getData();
  }

  /**
   * Gets the user account settings for a specified user. Retrieves a list of the account settings
   * and email notification information for the specified user. The response returns the account
   * setting name/value information and the email notification settings for the specified user. For
   * more information about the different user settings, see the [ML:userSettings list].
   *
   * @param accountId The external account number (int) or account ID Guid. (required)
   * @param userId The user ID of the user being accessed. Generally this is the user ID of the
   *     authenticated user, but if the authenticated user is an Admin on the account, this may be
   *     another user the Admin user is accessing. (required)
   * @return UserSettingsInformation
   * @throws ApiException if fails to make API call
   */
  public ApiResponse getSettingsWithHttpInfo(
      String accountId, String userId) throws ApiException {
    Object localVarPostBody = "{}";

    // verify the required parameter 'accountId' is set
    if (accountId == null) {
      throw new ApiException(
          400, "Missing the required parameter 'accountId' when calling getSettings");
    }

    // verify the required parameter 'userId' is set
    if (userId == null) {
      throw new ApiException(
          400, "Missing the required parameter 'userId' when calling getSettings");
    }

    // create path and map variables
    String localVarPath =
        "/v2.1/accounts/{accountId}/users/{userId}/settings"
            .replaceAll("\\{" + "accountId" + "\\}", apiClient.escapeString(accountId.toString()))
            .replaceAll("\\{" + "userId" + "\\}", apiClient.escapeString(userId.toString()));

    // query params
    java.util.List localVarQueryParams = new java.util.ArrayList();
    java.util.List localVarCollectionQueryParams = new java.util.ArrayList();
    java.util.Map localVarHeaderParams = new java.util.HashMap();
    java.util.Map localVarFormParams = new java.util.HashMap();

    final String[] localVarAccepts = {"application/json"};
    final String localVarAccept = apiClient.selectHeaderAccept(localVarAccepts);

    final String[] localVarContentTypes = {};

    final String localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes);

    String[] localVarAuthNames = new String[] {"docusignAccessCode"};

    GenericType localVarReturnType =
        new GenericType() {};
    UserSettingsInformation localVarResponse =
        apiClient.invokeAPI(
            localVarPath,
            "GET",
            localVarQueryParams,
            localVarCollectionQueryParams,
            localVarPostBody,
            localVarHeaderParams,
            localVarFormParams,
            localVarAccept,
            localVarContentType,
            localVarAuthNames,
            localVarReturnType);
    return new ApiResponse(
        apiClient.getStatusCode(), apiClient.getResponseHeaders(), localVarResponse);
  }

  /**
   * Gets the user signature information for the specified user.. Retrieves the structure of a
   * single signature with a known signature name. The userId specified in the endpoint must match
   * the authenticated user's user ID and the user must be a member of the account. The
   * `signatureId` parameter accepts a signature ID or a signature name. DocuSign
   * recommends you use signature ID (`signatureId`), since some names contain characters
   * that do not properly encode into a URL. If you use the user name, it is likely that the name
   * includes spaces. In that case, URL encode the name before using it in the endpoint. For example
   * encode \"Bob Smith\" as \"Bob%20Smith\".
   *
   * @param accountId The external account number (int) or account ID Guid. (required)
   * @param userId The user ID of the user being accessed. Generally this is the user ID of the
   *     authenticated user, but if the authenticated user is an Admin on the account, this may be
   *     another user the Admin user is accessing. (required)
   * @param signatureId The ID of the signature being accessed. (required)
   * @return UserSignature
   * @throws ApiException if fails to make API call
   */
  public UserSignature getSignature(String accountId, String userId, String signatureId)
      throws ApiException {
    ApiResponse localVarResponse =
        getSignatureWithHttpInfo(accountId, userId, signatureId);
    return localVarResponse.getData();
  }

  /**
   * Gets the user signature information for the specified user. Retrieves the structure of a single
   * signature with a known signature name. The userId specified in the endpoint must match the
   * authenticated user's user ID and the user must be a member of the account. The
   * `signatureId` parameter accepts a signature ID or a signature name. DocuSign
   * recommends you use signature ID (`signatureId`), since some names contain characters
   * that do not properly encode into a URL. If you use the user name, it is likely that the name
   * includes spaces. In that case, URL encode the name before using it in the endpoint. For example
   * encode \"Bob Smith\" as \"Bob%20Smith\".
   *
   * @param accountId The external account number (int) or account ID Guid. (required)
   * @param userId The user ID of the user being accessed. Generally this is the user ID of the
   *     authenticated user, but if the authenticated user is an Admin on the account, this may be
   *     another user the Admin user is accessing. (required)
   * @param signatureId The ID of the signature being accessed. (required)
   * @return UserSignature
   * @throws ApiException if fails to make API call
   */
  public ApiResponse getSignatureWithHttpInfo(
      String accountId, String userId, String signatureId) throws ApiException {
    Object localVarPostBody = "{}";

    // verify the required parameter 'accountId' is set
    if (accountId == null) {
      throw new ApiException(
          400, "Missing the required parameter 'accountId' when calling getSignature");
    }

    // verify the required parameter 'userId' is set
    if (userId == null) {
      throw new ApiException(
          400, "Missing the required parameter 'userId' when calling getSignature");
    }

    // verify the required parameter 'signatureId' is set
    if (signatureId == null) {
      throw new ApiException(
          400, "Missing the required parameter 'signatureId' when calling getSignature");
    }

    // create path and map variables
    String localVarPath =
        "/v2.1/accounts/{accountId}/users/{userId}/signatures/{signatureId}"
            .replaceAll("\\{" + "accountId" + "\\}", apiClient.escapeString(accountId.toString()))
            .replaceAll("\\{" + "userId" + "\\}", apiClient.escapeString(userId.toString()))
            .replaceAll(
                "\\{" + "signatureId" + "\\}", apiClient.escapeString(signatureId.toString()));

    // query params
    java.util.List localVarQueryParams = new java.util.ArrayList();
    java.util.List localVarCollectionQueryParams = new java.util.ArrayList();
    java.util.Map localVarHeaderParams = new java.util.HashMap();
    java.util.Map localVarFormParams = new java.util.HashMap();

    final String[] localVarAccepts = {"application/json"};
    final String localVarAccept = apiClient.selectHeaderAccept(localVarAccepts);

    final String[] localVarContentTypes = {};

    final String localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes);

    String[] localVarAuthNames = new String[] {"docusignAccessCode"};

    GenericType localVarReturnType = new GenericType() {};
    UserSignature localVarResponse =
        apiClient.invokeAPI(
            localVarPath,
            "GET",
            localVarQueryParams,
            localVarCollectionQueryParams,
            localVarPostBody,
            localVarHeaderParams,
            localVarFormParams,
            localVarAccept,
            localVarContentType,
            localVarAuthNames,
            localVarReturnType);
    return new ApiResponse(
        apiClient.getStatusCode(), apiClient.getResponseHeaders(), localVarResponse);
  }
  /// 
  /// Retrieves the user initials image or the  user signature image for the specified user.
  // Retrieves the specified initials image or signature image for the specified user. The image is
  // returned in the same format as uploaded. In the request you can specify if the chrome (the
  // added line and identifier around the initial image) is returned with the image.  The userId
  // property specified in the endpoint must match the authenticated user's user ID and the user
  // must be a member of the account.  The `signatureId` parameter accepts a signature ID
  // or a signature name. DocuSign recommends you use signature ID (`signatureId`), since
  // some names contain characters that do not properly encode into a URL. If you use the user name,
  // it is likely that the name includes spaces. In that case, URL encode the name before using it
  // in the endpoint.   For example encode \"Bob Smith\" as \"Bob%20Smith\".
  // ###### Note: Older envelopes might only have chromed images. If getting the non-chromed image
  // fails, try getting the chromed image.
  /// 

  /** GetSignatureImageOptions Class. */
  public class GetSignatureImageOptions {
    private String includeChrome = null;

    /** setIncludeChrome method. */
    public void setIncludeChrome(String includeChrome) {
      this.includeChrome = includeChrome;
    }

    /**
     * getIncludeChrome method.
     *
     * @return String
     */
    public String getIncludeChrome() {
      return this.includeChrome;
    }
  }

  /**
   * Retrieves the user initials image or the user signature image for the specified user..
   * Retrieves the specified initials image or signature image for the specified user. The image is
   * returned in the same format as uploaded. In the request you can specify if the chrome (the
   * added line and identifier around the initial image) is returned with the image. The userId
   * property specified in the endpoint must match the authenticated user's user ID and the user
   * must be a member of the account. The `signatureId` parameter accepts a signature ID
   * or a signature name. DocuSign recommends you use signature ID (`signatureId`), since
   * some names contain characters that do not properly encode into a URL. If you use the user name,
   * it is likely that the name includes spaces. In that case, URL encode the name before using it
   * in the endpoint. For example encode \"Bob Smith\" as \"Bob%20Smith\".
   * ###### Note: Older envelopes might only have chromed images. If getting the non-chromed image
   * fails, try getting the chromed image.
   *
   * @param accountId The external account number (int) or account ID Guid. (required)
   * @param userId The user ID of the user being accessed. Generally this is the user ID of the
   *     authenticated user, but if the authenticated user is an Admin on the account, this may be
   *     another user the Admin user is accessing. (required)
   * @param signatureId The ID of the signature being accessed. (required)
   * @param imageType One of **signature_image** or **initials_image**. (required)
   * @return byte[]
   */
  public byte[] getSignatureImage(
      String accountId, String userId, String signatureId, String imageType) throws ApiException {
    return getSignatureImage(accountId, userId, signatureId, imageType, null);
  }

  /**
   * Retrieves the user initials image or the user signature image for the specified user..
   * Retrieves the specified initials image or signature image for the specified user. The image is
   * returned in the same format as uploaded. In the request you can specify if the chrome (the
   * added line and identifier around the initial image) is returned with the image. The userId
   * property specified in the endpoint must match the authenticated user's user ID and the user
   * must be a member of the account. The `signatureId` parameter accepts a signature ID
   * or a signature name. DocuSign recommends you use signature ID (`signatureId`), since
   * some names contain characters that do not properly encode into a URL. If you use the user name,
   * it is likely that the name includes spaces. In that case, URL encode the name before using it
   * in the endpoint. For example encode \"Bob Smith\" as \"Bob%20Smith\".
   * ###### Note: Older envelopes might only have chromed images. If getting the non-chromed image
   * fails, try getting the chromed image.
   *
   * @param accountId The external account number (int) or account ID Guid. (required)
   * @param userId The user ID of the user being accessed. Generally this is the user ID of the
   *     authenticated user, but if the authenticated user is an Admin on the account, this may be
   *     another user the Admin user is accessing. (required)
   * @param signatureId The ID of the signature being accessed. (required)
   * @param imageType One of **signature_image** or **initials_image**. (required)
   * @param options for modifying the method behavior.
   * @return byte[]
   * @throws ApiException if fails to make API call
   */
  public byte[] getSignatureImage(
      String accountId,
      String userId,
      String signatureId,
      String imageType,
      UsersApi.GetSignatureImageOptions options)
      throws ApiException {
    ApiResponse localVarResponse =
        getSignatureImageWithHttpInfo(accountId, userId, signatureId, imageType, options);
    return localVarResponse.getData();
  }

  /**
   * Retrieves the user initials image or the user signature image for the specified user. Retrieves
   * the specified initials image or signature image for the specified user. The image is returned
   * in the same format as uploaded. In the request you can specify if the chrome (the added line
   * and identifier around the initial image) is returned with the image. The userId property
   * specified in the endpoint must match the authenticated user's user ID and the user must be
   * a member of the account. The `signatureId` parameter accepts a signature ID or a
   * signature name. DocuSign recommends you use signature ID (`signatureId`), since some
   * names contain characters that do not properly encode into a URL. If you use the user name, it
   * is likely that the name includes spaces. In that case, URL encode the name before using it in
   * the endpoint. For example encode \"Bob Smith\" as \"Bob%20Smith\". ######
   * Note: Older envelopes might only have chromed images. If getting the non-chromed image fails,
   * try getting the chromed image.
   *
   * @param accountId The external account number (int) or account ID Guid. (required)
   * @param userId The user ID of the user being accessed. Generally this is the user ID of the
   *     authenticated user, but if the authenticated user is an Admin on the account, this may be
   *     another user the Admin user is accessing. (required)
   * @param signatureId The ID of the signature being accessed. (required)
   * @param imageType One of **signature_image** or **initials_image**. (required)
   * @param options for modifying the method behavior.
   * @return byte[]
   * @throws ApiException if fails to make API call
   */
  public ApiResponse getSignatureImageWithHttpInfo(
      String accountId,
      String userId,
      String signatureId,
      String imageType,
      UsersApi.GetSignatureImageOptions options)
      throws ApiException {
    Object localVarPostBody = "{}";

    // verify the required parameter 'accountId' is set
    if (accountId == null) {
      throw new ApiException(
          400, "Missing the required parameter 'accountId' when calling getSignatureImage");
    }

    // verify the required parameter 'userId' is set
    if (userId == null) {
      throw new ApiException(
          400, "Missing the required parameter 'userId' when calling getSignatureImage");
    }

    // verify the required parameter 'signatureId' is set
    if (signatureId == null) {
      throw new ApiException(
          400, "Missing the required parameter 'signatureId' when calling getSignatureImage");
    }

    // verify the required parameter 'imageType' is set
    if (imageType == null) {
      throw new ApiException(
          400, "Missing the required parameter 'imageType' when calling getSignatureImage");
    }

    // create path and map variables
    String localVarPath =
        "/v2.1/accounts/{accountId}/users/{userId}/signatures/{signatureId}/{imageType}"
            .replaceAll("\\{" + "accountId" + "\\}", apiClient.escapeString(accountId.toString()))
            .replaceAll("\\{" + "userId" + "\\}", apiClient.escapeString(userId.toString()))
            .replaceAll(
                "\\{" + "signatureId" + "\\}", apiClient.escapeString(signatureId.toString()))
            .replaceAll("\\{" + "imageType" + "\\}", apiClient.escapeString(imageType.toString()));

    // query params
    java.util.List localVarQueryParams = new java.util.ArrayList();
    java.util.List localVarCollectionQueryParams = new java.util.ArrayList();
    java.util.Map localVarHeaderParams = new java.util.HashMap();
    java.util.Map localVarFormParams = new java.util.HashMap();

    if (options != null) {
      localVarQueryParams.addAll(
          apiClient.parameterToPair("include_chrome", options.includeChrome));
    }

    final String[] localVarAccepts = {"image/gif"};
    final String localVarAccept = apiClient.selectHeaderAccept(localVarAccepts);

    final String[] localVarContentTypes = {};

    final String localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes);

    String[] localVarAuthNames = new String[] {"docusignAccessCode"};

    GenericType localVarReturnType = new GenericType() {};
    byte[] localVarResponse =
        apiClient.invokeAPI(
            localVarPath,
            "GET",
            localVarQueryParams,
            localVarCollectionQueryParams,
            localVarPostBody,
            localVarHeaderParams,
            localVarFormParams,
            localVarAccept,
            localVarContentType,
            localVarAuthNames,
            localVarReturnType);
    return new ApiResponse(
        apiClient.getStatusCode(), apiClient.getResponseHeaders(), localVarResponse);
  }

  /**
   * Retrieves the custom user settings for a specified user.. Retrieves a list of custom user
   * settings for a single user. Custom settings provide a flexible way to store and retrieve custom
   * user information that can be used in your own system. ###### Note: Custom user settings are not
   * the same as user account settings. ###Getting Grouped Custom User Settings### If the custom
   * user settings you want to retrieve are grouped, you must include the following information in
   * the header, after Content-Type, in the request:
   * `X-DocuSign-User-Settings-Key:group_name` Where the `group_name` is your
   * designated name for the group of customer user settings. If the extra header information is not
   * included, only the custom user settings that were added without a group are retrieved.
   *
   * @param accountId The external account number (int) or account ID Guid. (required)
   * @param userId The user ID of the user being accessed. Generally this is the user ID of the
   *     authenticated user, but if the authenticated user is an Admin on the account, this may be
   *     another user the Admin user is accessing. (required)
   * @return CustomSettingsInformation
   * @throws ApiException if fails to make API call
   */
  public CustomSettingsInformation listCustomSettings(String accountId, String userId)
      throws ApiException {
    ApiResponse localVarResponse =
        listCustomSettingsWithHttpInfo(accountId, userId);
    return localVarResponse.getData();
  }

  /**
   * Retrieves the custom user settings for a specified user. Retrieves a list of custom user
   * settings for a single user. Custom settings provide a flexible way to store and retrieve custom
   * user information that can be used in your own system. ###### Note: Custom user settings are not
   * the same as user account settings. ###Getting Grouped Custom User Settings### If the custom
   * user settings you want to retrieve are grouped, you must include the following information in
   * the header, after Content-Type, in the request:
   * `X-DocuSign-User-Settings-Key:group_name` Where the `group_name` is your
   * designated name for the group of customer user settings. If the extra header information is not
   * included, only the custom user settings that were added without a group are retrieved.
   *
   * @param accountId The external account number (int) or account ID Guid. (required)
   * @param userId The user ID of the user being accessed. Generally this is the user ID of the
   *     authenticated user, but if the authenticated user is an Admin on the account, this may be
   *     another user the Admin user is accessing. (required)
   * @return CustomSettingsInformation
   * @throws ApiException if fails to make API call
   */
  public ApiResponse listCustomSettingsWithHttpInfo(
      String accountId, String userId) throws ApiException {
    Object localVarPostBody = "{}";

    // verify the required parameter 'accountId' is set
    if (accountId == null) {
      throw new ApiException(
          400, "Missing the required parameter 'accountId' when calling listCustomSettings");
    }

    // verify the required parameter 'userId' is set
    if (userId == null) {
      throw new ApiException(
          400, "Missing the required parameter 'userId' when calling listCustomSettings");
    }

    // create path and map variables
    String localVarPath =
        "/v2.1/accounts/{accountId}/users/{userId}/custom_settings"
            .replaceAll("\\{" + "accountId" + "\\}", apiClient.escapeString(accountId.toString()))
            .replaceAll("\\{" + "userId" + "\\}", apiClient.escapeString(userId.toString()));

    // query params
    java.util.List localVarQueryParams = new java.util.ArrayList();
    java.util.List localVarCollectionQueryParams = new java.util.ArrayList();
    java.util.Map localVarHeaderParams = new java.util.HashMap();
    java.util.Map localVarFormParams = new java.util.HashMap();

    final String[] localVarAccepts = {"application/json"};
    final String localVarAccept = apiClient.selectHeaderAccept(localVarAccepts);

    final String[] localVarContentTypes = {};

    final String localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes);

    String[] localVarAuthNames = new String[] {"docusignAccessCode"};

    GenericType localVarReturnType =
        new GenericType() {};
    CustomSettingsInformation localVarResponse =
        apiClient.invokeAPI(
            localVarPath,
            "GET",
            localVarQueryParams,
            localVarCollectionQueryParams,
            localVarPostBody,
            localVarHeaderParams,
            localVarFormParams,
            localVarAccept,
            localVarContentType,
            localVarAuthNames,
            localVarReturnType);
    return new ApiResponse(
        apiClient.getStatusCode(), apiClient.getResponseHeaders(), localVarResponse);
  }
  /// 
  /// Retrieves a list of user signature definitions for a specified user. Retrieves the signature
  // definitions for the specified user.  The userId parameter specified in the endpoint must match
  // the authenticated user's user ID and the user must be a member of the account.  The
  // `signatureId` parameter accepts a signature ID or a signature name. DocuSign
  // recommends you use signature ID (`signatureId`), since some names contain characters
  // that do not properly encode into a URL. If you use the user name, it is likely that the name
  // includes spaces. In that case, URL encode the name before using it in the endpoint.   For
  // example encode \"Bob Smith\" as \"Bob%20Smith\".
  /// 

  /** ListSignaturesOptions Class. */
  public class ListSignaturesOptions {
    private String stampType = null;

    /** setStampType method. */
    public void setStampType(String stampType) {
      this.stampType = stampType;
    }

    /**
     * getStampType method.
     *
     * @return String
     */
    public String getStampType() {
      return this.stampType;
    }
  }

  /**
   * Retrieves a list of user signature definitions for a specified user.. Retrieves the signature
   * definitions for the specified user. The userId parameter specified in the endpoint must match
   * the authenticated user's user ID and the user must be a member of the account. The
   * `signatureId` parameter accepts a signature ID or a signature name. DocuSign
   * recommends you use signature ID (`signatureId`), since some names contain characters
   * that do not properly encode into a URL. If you use the user name, it is likely that the name
   * includes spaces. In that case, URL encode the name before using it in the endpoint. For example
   * encode \"Bob Smith\" as \"Bob%20Smith\".
   *
   * @param accountId The external account number (int) or account ID Guid. (required)
   * @param userId The user ID of the user being accessed. Generally this is the user ID of the
   *     authenticated user, but if the authenticated user is an Admin on the account, this may be
   *     another user the Admin user is accessing. (required)
   * @return UserSignaturesInformation
   */
  public UserSignaturesInformation listSignatures(String accountId, String userId)
      throws ApiException {
    return listSignatures(accountId, userId, null);
  }

  /**
   * Retrieves a list of user signature definitions for a specified user.. Retrieves the signature
   * definitions for the specified user. The userId parameter specified in the endpoint must match
   * the authenticated user's user ID and the user must be a member of the account. The
   * `signatureId` parameter accepts a signature ID or a signature name. DocuSign
   * recommends you use signature ID (`signatureId`), since some names contain characters
   * that do not properly encode into a URL. If you use the user name, it is likely that the name
   * includes spaces. In that case, URL encode the name before using it in the endpoint. For example
   * encode \"Bob Smith\" as \"Bob%20Smith\".
   *
   * @param accountId The external account number (int) or account ID Guid. (required)
   * @param userId The user ID of the user being accessed. Generally this is the user ID of the
   *     authenticated user, but if the authenticated user is an Admin on the account, this may be
   *     another user the Admin user is accessing. (required)
   * @param options for modifying the method behavior.
   * @return UserSignaturesInformation
   * @throws ApiException if fails to make API call
   */
  public UserSignaturesInformation listSignatures(
      String accountId, String userId, UsersApi.ListSignaturesOptions options) throws ApiException {
    ApiResponse localVarResponse =
        listSignaturesWithHttpInfo(accountId, userId, options);
    return localVarResponse.getData();
  }

  /**
   * Retrieves a list of user signature definitions for a specified user. Retrieves the signature
   * definitions for the specified user. The userId parameter specified in the endpoint must match
   * the authenticated user's user ID and the user must be a member of the account. The
   * `signatureId` parameter accepts a signature ID or a signature name. DocuSign
   * recommends you use signature ID (`signatureId`), since some names contain characters
   * that do not properly encode into a URL. If you use the user name, it is likely that the name
   * includes spaces. In that case, URL encode the name before using it in the endpoint. For example
   * encode \"Bob Smith\" as \"Bob%20Smith\".
   *
   * @param accountId The external account number (int) or account ID Guid. (required)
   * @param userId The user ID of the user being accessed. Generally this is the user ID of the
   *     authenticated user, but if the authenticated user is an Admin on the account, this may be
   *     another user the Admin user is accessing. (required)
   * @param options for modifying the method behavior.
   * @return UserSignaturesInformation
   * @throws ApiException if fails to make API call
   */
  public ApiResponse listSignaturesWithHttpInfo(
      String accountId, String userId, UsersApi.ListSignaturesOptions options) throws ApiException {
    Object localVarPostBody = "{}";

    // verify the required parameter 'accountId' is set
    if (accountId == null) {
      throw new ApiException(
          400, "Missing the required parameter 'accountId' when calling listSignatures");
    }

    // verify the required parameter 'userId' is set
    if (userId == null) {
      throw new ApiException(
          400, "Missing the required parameter 'userId' when calling listSignatures");
    }

    // create path and map variables
    String localVarPath =
        "/v2.1/accounts/{accountId}/users/{userId}/signatures"
            .replaceAll("\\{" + "accountId" + "\\}", apiClient.escapeString(accountId.toString()))
            .replaceAll("\\{" + "userId" + "\\}", apiClient.escapeString(userId.toString()));

    // query params
    java.util.List localVarQueryParams = new java.util.ArrayList();
    java.util.List localVarCollectionQueryParams = new java.util.ArrayList();
    java.util.Map localVarHeaderParams = new java.util.HashMap();
    java.util.Map localVarFormParams = new java.util.HashMap();

    if (options != null) {
      localVarQueryParams.addAll(apiClient.parameterToPair("stamp_type", options.stampType));
    }

    final String[] localVarAccepts = {"application/json"};
    final String localVarAccept = apiClient.selectHeaderAccept(localVarAccepts);

    final String[] localVarContentTypes = {};

    final String localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes);

    String[] localVarAuthNames = new String[] {"docusignAccessCode"};

    GenericType localVarReturnType =
        new GenericType() {};
    UserSignaturesInformation localVarResponse =
        apiClient.invokeAPI(
            localVarPath,
            "GET",
            localVarQueryParams,
            localVarCollectionQueryParams,
            localVarPostBody,
            localVarHeaderParams,
            localVarFormParams,
            localVarAccept,
            localVarContentType,
            localVarAuthNames,
            localVarReturnType);
    return new ApiResponse(
        apiClient.getStatusCode(), apiClient.getResponseHeaders(), localVarResponse);
  }

  /**
   * Imports multiple new contacts into the contacts collection from CSV, JSON, or XML (based on
   * content type).. This method adds multiple contacts into a contacts list.
   *
   * @param accountId The external account number (int) or account ID Guid. (required)
   * @param contactModRequest (optional)
   * @return ContactUpdateResponse
   * @throws ApiException if fails to make API call
   */
  public ContactUpdateResponse postContacts(String accountId, ContactModRequest contactModRequest)
      throws ApiException {
    ApiResponse localVarResponse =
        postContactsWithHttpInfo(accountId, contactModRequest);
    return localVarResponse.getData();
  }

  /**
   * Imports multiple new contacts into the contacts collection from CSV, JSON, or XML (based on
   * content type). This method adds multiple contacts into a contacts list.
   *
   * @param accountId The external account number (int) or account ID Guid. (required)
   * @param contactModRequest (optional)
   * @return ContactUpdateResponse
   * @throws ApiException if fails to make API call
   */
  public ApiResponse postContactsWithHttpInfo(
      String accountId, ContactModRequest contactModRequest) throws ApiException {
    Object localVarPostBody = contactModRequest;

    // verify the required parameter 'accountId' is set
    if (accountId == null) {
      throw new ApiException(
          400, "Missing the required parameter 'accountId' when calling postContacts");
    }

    // create path and map variables
    String localVarPath =
        "/v2.1/accounts/{accountId}/contacts"
            .replaceAll("\\{" + "accountId" + "\\}", apiClient.escapeString(accountId.toString()));

    // query params
    java.util.List localVarQueryParams = new java.util.ArrayList();
    java.util.List localVarCollectionQueryParams = new java.util.ArrayList();
    java.util.Map localVarHeaderParams = new java.util.HashMap();
    java.util.Map localVarFormParams = new java.util.HashMap();

    final String[] localVarAccepts = {"application/json"};
    final String localVarAccept = apiClient.selectHeaderAccept(localVarAccepts);

    final String[] localVarContentTypes = {};

    final String localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes);

    String[] localVarAuthNames = new String[] {"docusignAccessCode"};

    GenericType localVarReturnType =
        new GenericType() {};
    ContactUpdateResponse localVarResponse =
        apiClient.invokeAPI(
            localVarPath,
            "POST",
            localVarQueryParams,
            localVarCollectionQueryParams,
            localVarPostBody,
            localVarHeaderParams,
            localVarFormParams,
            localVarAccept,
            localVarContentType,
            localVarAuthNames,
            localVarReturnType);
    return new ApiResponse(
        apiClient.getStatusCode(), apiClient.getResponseHeaders(), localVarResponse);
  }

  /**
   * Replaces contacts associated with an account for the DocuSign service.. This method updates one
   * or more contacts associated with an account.
   *
   * @param accountId The external account number (int) or account ID Guid. (required)
   * @param contactModRequest (optional)
   * @return ContactUpdateResponse
   * @throws ApiException if fails to make API call
   */
  public ContactUpdateResponse putContacts(String accountId, ContactModRequest contactModRequest)
      throws ApiException {
    ApiResponse localVarResponse =
        putContactsWithHttpInfo(accountId, contactModRequest);
    return localVarResponse.getData();
  }

  /**
   * Replaces contacts associated with an account for the DocuSign service. This method updates one
   * or more contacts associated with an account.
   *
   * @param accountId The external account number (int) or account ID Guid. (required)
   * @param contactModRequest (optional)
   * @return ContactUpdateResponse
   * @throws ApiException if fails to make API call
   */
  public ApiResponse putContactsWithHttpInfo(
      String accountId, ContactModRequest contactModRequest) throws ApiException {
    Object localVarPostBody = contactModRequest;

    // verify the required parameter 'accountId' is set
    if (accountId == null) {
      throw new ApiException(
          400, "Missing the required parameter 'accountId' when calling putContacts");
    }

    // create path and map variables
    String localVarPath =
        "/v2.1/accounts/{accountId}/contacts"
            .replaceAll("\\{" + "accountId" + "\\}", apiClient.escapeString(accountId.toString()));

    // query params
    java.util.List localVarQueryParams = new java.util.ArrayList();
    java.util.List localVarCollectionQueryParams = new java.util.ArrayList();
    java.util.Map localVarHeaderParams = new java.util.HashMap();
    java.util.Map localVarFormParams = new java.util.HashMap();

    final String[] localVarAccepts = {"application/json"};
    final String localVarAccept = apiClient.selectHeaderAccept(localVarAccepts);

    final String[] localVarContentTypes = {};

    final String localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes);

    String[] localVarAuthNames = new String[] {"docusignAccessCode"};

    GenericType localVarReturnType =
        new GenericType() {};
    ContactUpdateResponse localVarResponse =
        apiClient.invokeAPI(
            localVarPath,
            "PUT",
            localVarQueryParams,
            localVarCollectionQueryParams,
            localVarPostBody,
            localVarHeaderParams,
            localVarFormParams,
            localVarAccept,
            localVarContentType,
            localVarAuthNames,
            localVarReturnType);
    return new ApiResponse(
        apiClient.getStatusCode(), apiClient.getResponseHeaders(), localVarResponse);
  }

  /**
   * Adds or updates custom user settings for the specified user.. Adds or updates custom user
   * settings for the specified user. ###### Note: Custom user settings are not the same as user
   * account settings. Custom settings provide a flexible way to store and retrieve custom user
   * information that you can use in your own system. **Important**: There is a limit on the size
   * for all the custom user settings for a single user. The limit is 4,000 characters, which
   * includes the XML and JSON structure for the settings. ### Grouping Custom User Settings ### You
   * can group custom user settings when adding them. Grouping allows you to retrieve settings that
   * are in a specific group, instead of retrieving all the user custom settings. To group custom
   * user settings, add the following information in the header, after Content-Type:
   * `X-DocuSign-User-Settings-Key:group_name` Where the `group_name` is your
   * designated name for the group of customer user settings. Grouping is shown in the Example
   * Request Body below. When getting or deleting grouped custom user settings, you must include the
   * extra header information. Grouping custom user settings is not required and if the extra header
   * information is not included, the custom user settings are added normally and can be retrieved
   * or deleted without including the additional header.
   *
   * @param accountId The external account number (int) or account ID Guid. (required)
   * @param userId The user ID of the user being accessed. Generally this is the user ID of the
   *     authenticated user, but if the authenticated user is an Admin on the account, this may be
   *     another user the Admin user is accessing. (required)
   * @param customSettingsInformation (optional)
   * @return CustomSettingsInformation
   * @throws ApiException if fails to make API call
   */
  public CustomSettingsInformation updateCustomSettings(
      String accountId, String userId, CustomSettingsInformation customSettingsInformation)
      throws ApiException {
    ApiResponse localVarResponse =
        updateCustomSettingsWithHttpInfo(accountId, userId, customSettingsInformation);
    return localVarResponse.getData();
  }

  /**
   * Adds or updates custom user settings for the specified user. Adds or updates custom user
   * settings for the specified user. ###### Note: Custom user settings are not the same as user
   * account settings. Custom settings provide a flexible way to store and retrieve custom user
   * information that you can use in your own system. **Important**: There is a limit on the size
   * for all the custom user settings for a single user. The limit is 4,000 characters, which
   * includes the XML and JSON structure for the settings. ### Grouping Custom User Settings ### You
   * can group custom user settings when adding them. Grouping allows you to retrieve settings that
   * are in a specific group, instead of retrieving all the user custom settings. To group custom
   * user settings, add the following information in the header, after Content-Type:
   * `X-DocuSign-User-Settings-Key:group_name` Where the `group_name` is your
   * designated name for the group of customer user settings. Grouping is shown in the Example
   * Request Body below. When getting or deleting grouped custom user settings, you must include the
   * extra header information. Grouping custom user settings is not required and if the extra header
   * information is not included, the custom user settings are added normally and can be retrieved
   * or deleted without including the additional header.
   *
   * @param accountId The external account number (int) or account ID Guid. (required)
   * @param userId The user ID of the user being accessed. Generally this is the user ID of the
   *     authenticated user, but if the authenticated user is an Admin on the account, this may be
   *     another user the Admin user is accessing. (required)
   * @param customSettingsInformation (optional)
   * @return CustomSettingsInformation
   * @throws ApiException if fails to make API call
   */
  public ApiResponse updateCustomSettingsWithHttpInfo(
      String accountId, String userId, CustomSettingsInformation customSettingsInformation)
      throws ApiException {
    Object localVarPostBody = customSettingsInformation;

    // verify the required parameter 'accountId' is set
    if (accountId == null) {
      throw new ApiException(
          400, "Missing the required parameter 'accountId' when calling updateCustomSettings");
    }

    // verify the required parameter 'userId' is set
    if (userId == null) {
      throw new ApiException(
          400, "Missing the required parameter 'userId' when calling updateCustomSettings");
    }

    // create path and map variables
    String localVarPath =
        "/v2.1/accounts/{accountId}/users/{userId}/custom_settings"
            .replaceAll("\\{" + "accountId" + "\\}", apiClient.escapeString(accountId.toString()))
            .replaceAll("\\{" + "userId" + "\\}", apiClient.escapeString(userId.toString()));

    // query params
    java.util.List localVarQueryParams = new java.util.ArrayList();
    java.util.List localVarCollectionQueryParams = new java.util.ArrayList();
    java.util.Map localVarHeaderParams = new java.util.HashMap();
    java.util.Map localVarFormParams = new java.util.HashMap();

    final String[] localVarAccepts = {"application/json"};
    final String localVarAccept = apiClient.selectHeaderAccept(localVarAccepts);

    final String[] localVarContentTypes = {};

    final String localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes);

    String[] localVarAuthNames = new String[] {"docusignAccessCode"};

    GenericType localVarReturnType =
        new GenericType() {};
    CustomSettingsInformation localVarResponse =
        apiClient.invokeAPI(
            localVarPath,
            "PUT",
            localVarQueryParams,
            localVarCollectionQueryParams,
            localVarPostBody,
            localVarHeaderParams,
            localVarFormParams,
            localVarAccept,
            localVarContentType,
            localVarAuthNames,
            localVarReturnType);
    return new ApiResponse(
        apiClient.getStatusCode(), apiClient.getResponseHeaders(), localVarResponse);
  }

  /**
   * Updates the user profile information for the specified user.. Updates the user's detail
   * information, profile information, privacy settings, and personal information in the user ID
   * card. You can also change a user's name by changing the information in the
   * `userDetails` property. When changing a user's name, you can either change the
   * information in the `userName` property OR change the information in
   * `firstName`, `middleName`, `lastName, suffixName`, and
   * `title` properties. Changes to `firstName`, `middleName`,
   * `lastName`, `suffixName`, and `title` properties take precedence
   * over changes to the `userName` property.
   *
   * @param accountId The external account number (int) or account ID Guid. (required)
   * @param userId The user ID of the user being accessed. Generally this is the user ID of the
   *     authenticated user, but if the authenticated user is an Admin on the account, this may be
   *     another user the Admin user is accessing. (required)
   * @param userProfile (optional)
   * @throws ApiException if fails to make API call
   */
  public void updateProfile(String accountId, String userId, UserProfile userProfile)
      throws ApiException {
    updateProfileWithHttpInfo(accountId, userId, userProfile);
  }

  /**
   * Updates the user profile information for the specified user. Updates the user's detail
   * information, profile information, privacy settings, and personal information in the user ID
   * card. You can also change a user's name by changing the information in the
   * `userDetails` property. When changing a user's name, you can either change the
   * information in the `userName` property OR change the information in
   * `firstName`, `middleName`, `lastName, suffixName`, and
   * `title` properties. Changes to `firstName`, `middleName`,
   * `lastName`, `suffixName`, and `title` properties take precedence
   * over changes to the `userName` property.
   *
   * @param accountId The external account number (int) or account ID Guid. (required)
   * @param userId The user ID of the user being accessed. Generally this is the user ID of the
   *     authenticated user, but if the authenticated user is an Admin on the account, this may be
   *     another user the Admin user is accessing. (required)
   * @param userProfile (optional)
   * @throws ApiException if fails to make API call
   */
  public ApiResponse updateProfileWithHttpInfo(
      String accountId, String userId, UserProfile userProfile) throws ApiException {
    Object localVarPostBody = userProfile;

    // verify the required parameter 'accountId' is set
    if (accountId == null) {
      throw new ApiException(
          400, "Missing the required parameter 'accountId' when calling updateProfile");
    }

    // verify the required parameter 'userId' is set
    if (userId == null) {
      throw new ApiException(
          400, "Missing the required parameter 'userId' when calling updateProfile");
    }

    // create path and map variables
    String localVarPath =
        "/v2.1/accounts/{accountId}/users/{userId}/profile"
            .replaceAll("\\{" + "accountId" + "\\}", apiClient.escapeString(accountId.toString()))
            .replaceAll("\\{" + "userId" + "\\}", apiClient.escapeString(userId.toString()));

    // query params
    java.util.List localVarQueryParams = new java.util.ArrayList();
    java.util.List localVarCollectionQueryParams = new java.util.ArrayList();
    java.util.Map localVarHeaderParams = new java.util.HashMap();
    java.util.Map localVarFormParams = new java.util.HashMap();

    final String[] localVarAccepts = {"application/json"};
    final String localVarAccept = apiClient.selectHeaderAccept(localVarAccepts);

    final String[] localVarContentTypes = {};

    final String localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes);

    String[] localVarAuthNames = new String[] {"docusignAccessCode"};

    apiClient.invokeAPI(
        localVarPath,
        "PUT",
        localVarQueryParams,
        localVarCollectionQueryParams,
        localVarPostBody,
        localVarHeaderParams,
        localVarFormParams,
        localVarAccept,
        localVarContentType,
        localVarAuthNames,
        null);
    return new ApiResponse(apiClient.getStatusCode(), apiClient.getResponseHeaders(), null);
  }

  /**
   * Updates the user profile image for a specified user.. Updates the user profile image by
   * uploading an image to the user profile. The supported image formats are: gif, png, jpeg, and
   * bmp. The file must be less than 200K. For best viewing results, DocuSign recommends that the
   * image is no more than 79 pixels wide and high.
   *
   * @param accountId The external account number (int) or account ID Guid. (required)
   * @param userId The user ID of the user being accessed. Generally this is the user ID of the
   *     authenticated user, but if the authenticated user is an Admin on the account, this may be
   *     another user the Admin user is accessing. (required)
   * @throws ApiException if fails to make API call
   */
  public void updateProfileImage(String accountId, String userId) throws ApiException {
    updateProfileImageWithHttpInfo(accountId, userId);
  }

  /**
   * Updates the user profile image for a specified user. Updates the user profile image by
   * uploading an image to the user profile. The supported image formats are: gif, png, jpeg, and
   * bmp. The file must be less than 200K. For best viewing results, DocuSign recommends that the
   * image is no more than 79 pixels wide and high.
   *
   * @param accountId The external account number (int) or account ID Guid. (required)
   * @param userId The user ID of the user being accessed. Generally this is the user ID of the
   *     authenticated user, but if the authenticated user is an Admin on the account, this may be
   *     another user the Admin user is accessing. (required)
   * @throws ApiException if fails to make API call
   */
  public ApiResponse updateProfileImageWithHttpInfo(String accountId, String userId)
      throws ApiException {
    Object localVarPostBody = "{}";

    // verify the required parameter 'accountId' is set
    if (accountId == null) {
      throw new ApiException(
          400, "Missing the required parameter 'accountId' when calling updateProfileImage");
    }

    // verify the required parameter 'userId' is set
    if (userId == null) {
      throw new ApiException(
          400, "Missing the required parameter 'userId' when calling updateProfileImage");
    }

    // create path and map variables
    String localVarPath =
        "/v2.1/accounts/{accountId}/users/{userId}/profile/image"
            .replaceAll("\\{" + "accountId" + "\\}", apiClient.escapeString(accountId.toString()))
            .replaceAll("\\{" + "userId" + "\\}", apiClient.escapeString(userId.toString()));

    // query params
    java.util.List localVarQueryParams = new java.util.ArrayList();
    java.util.List localVarCollectionQueryParams = new java.util.ArrayList();
    java.util.Map localVarHeaderParams = new java.util.HashMap();
    java.util.Map localVarFormParams = new java.util.HashMap();

    final String[] localVarAccepts = {"application/json"};
    final String localVarAccept = apiClient.selectHeaderAccept(localVarAccepts);

    final String[] localVarContentTypes = {"image/gif"};
    final String localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes);

    String[] localVarAuthNames = new String[] {"docusignAccessCode"};

    apiClient.invokeAPI(
        localVarPath,
        "PUT",
        localVarQueryParams,
        localVarCollectionQueryParams,
        localVarPostBody,
        localVarHeaderParams,
        localVarFormParams,
        localVarAccept,
        localVarContentType,
        localVarAuthNames,
        null);
    return new ApiResponse(apiClient.getStatusCode(), apiClient.getResponseHeaders(), null);
  }
  /// 
  /// Updates the user account settings for a specified user. Updates the account settings list and
  // email notification types for the specified user.
  /// 

  /** UpdateSettingsOptions Class. */
  public class UpdateSettingsOptions {
    private String allowAllLanguages = null;

    /** setAllowAllLanguages method. */
    public void setAllowAllLanguages(String allowAllLanguages) {
      this.allowAllLanguages = allowAllLanguages;
    }

    /**
     * getAllowAllLanguages method.
     *
     * @return String
     */
    public String getAllowAllLanguages() {
      return this.allowAllLanguages;
    }
  }

  /**
   * Updates the user account settings for a specified user.. Updates the account settings list and
   * email notification types for the specified user.
   *
   * @param accountId The external account number (int) or account ID Guid. (required)
   * @param userId The user ID of the user being accessed. Generally this is the user ID of the
   *     authenticated user, but if the authenticated user is an Admin on the account, this may be
   *     another user the Admin user is accessing. (required)
   * @param userSettingsInformation (optional)
   * @return void
   */
  public void updateSettings(
      String accountId, String userId, UserSettingsInformation userSettingsInformation)
      throws ApiException {
    updateSettings(accountId, userId, userSettingsInformation, null);
  }

  /**
   * Updates the user account settings for a specified user.. Updates the account settings list and
   * email notification types for the specified user.
   *
   * @param accountId The external account number (int) or account ID Guid. (required)
   * @param userId The user ID of the user being accessed. Generally this is the user ID of the
   *     authenticated user, but if the authenticated user is an Admin on the account, this may be
   *     another user the Admin user is accessing. (required)
   * @param userSettingsInformation (optional)
   * @param options for modifying the method behavior.
   * @throws ApiException if fails to make API call
   */
  public void updateSettings(
      String accountId,
      String userId,
      UserSettingsInformation userSettingsInformation,
      UsersApi.UpdateSettingsOptions options)
      throws ApiException {
    updateSettingsWithHttpInfo(accountId, userId, userSettingsInformation, options);
  }

  /**
   * Updates the user account settings for a specified user. Updates the account settings list and
   * email notification types for the specified user.
   *
   * @param accountId The external account number (int) or account ID Guid. (required)
   * @param userId The user ID of the user being accessed. Generally this is the user ID of the
   *     authenticated user, but if the authenticated user is an Admin on the account, this may be
   *     another user the Admin user is accessing. (required)
   * @param userSettingsInformation (optional)
   * @param options for modifying the method behavior.
   * @throws ApiException if fails to make API call
   */
  public ApiResponse updateSettingsWithHttpInfo(
      String accountId,
      String userId,
      UserSettingsInformation userSettingsInformation,
      UsersApi.UpdateSettingsOptions options)
      throws ApiException {
    Object localVarPostBody = userSettingsInformation;

    // verify the required parameter 'accountId' is set
    if (accountId == null) {
      throw new ApiException(
          400, "Missing the required parameter 'accountId' when calling updateSettings");
    }

    // verify the required parameter 'userId' is set
    if (userId == null) {
      throw new ApiException(
          400, "Missing the required parameter 'userId' when calling updateSettings");
    }

    // create path and map variables
    String localVarPath =
        "/v2.1/accounts/{accountId}/users/{userId}/settings"
            .replaceAll("\\{" + "accountId" + "\\}", apiClient.escapeString(accountId.toString()))
            .replaceAll("\\{" + "userId" + "\\}", apiClient.escapeString(userId.toString()));

    // query params
    java.util.List localVarQueryParams = new java.util.ArrayList();
    java.util.List localVarCollectionQueryParams = new java.util.ArrayList();
    java.util.Map localVarHeaderParams = new java.util.HashMap();
    java.util.Map localVarFormParams = new java.util.HashMap();

    if (options != null) {
      localVarQueryParams.addAll(
          apiClient.parameterToPair("allow_all_languages", options.allowAllLanguages));
    }

    final String[] localVarAccepts = {"application/json"};
    final String localVarAccept = apiClient.selectHeaderAccept(localVarAccepts);

    final String[] localVarContentTypes = {};

    final String localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes);

    String[] localVarAuthNames = new String[] {"docusignAccessCode"};

    apiClient.invokeAPI(
        localVarPath,
        "PUT",
        localVarQueryParams,
        localVarCollectionQueryParams,
        localVarPostBody,
        localVarHeaderParams,
        localVarFormParams,
        localVarAccept,
        localVarContentType,
        localVarAuthNames,
        null);
    return new ApiResponse(apiClient.getStatusCode(), apiClient.getResponseHeaders(), null);
  }
  /// 
  /// Updates the user signature for a specified user. Creates, or updates, the signature font and
  // initials for the specified user. When creating a signature, you use this resource to create the
  // signature name and then add the signature and initials images into the signature.  ###### Note:
  // This will also create a default signature for the user when one does not exist.  The userId
  // property specified in the endpoint must match the authenticated user's user ID and the user
  // must be a member of the account.  The `signatureId` parameter accepts a signature ID
  // or a signature name. DocuSign recommends you use signature ID (`signatureId`), since
  // some names contain characters that do not properly encode into a URL. If you use the user name,
  // it is likely that the name includes spaces. In that case, URL encode the name before using it
  // in the endpoint.   For example encode \"Bob Smith\" as \"Bob%20Smith\".
  /// 

  /** UpdateSignatureOptions Class. */
  public class UpdateSignatureOptions {
    private String closeExistingSignature = null;

    /** setCloseExistingSignature method. */
    public void setCloseExistingSignature(String closeExistingSignature) {
      this.closeExistingSignature = closeExistingSignature;
    }

    /**
     * getCloseExistingSignature method.
     *
     * @return String
     */
    public String getCloseExistingSignature() {
      return this.closeExistingSignature;
    }
  }

  /**
   * Updates the user signature for a specified user.. Creates, or updates, the signature font and
   * initials for the specified user. When creating a signature, you use this resource to create the
   * signature name and then add the signature and initials images into the signature. ###### Note:
   * This will also create a default signature for the user when one does not exist. The userId
   * property specified in the endpoint must match the authenticated user's user ID and the user
   * must be a member of the account. The `signatureId` parameter accepts a signature ID
   * or a signature name. DocuSign recommends you use signature ID (`signatureId`), since
   * some names contain characters that do not properly encode into a URL. If you use the user name,
   * it is likely that the name includes spaces. In that case, URL encode the name before using it
   * in the endpoint. For example encode \"Bob Smith\" as \"Bob%20Smith\".
   *
   * @param accountId The external account number (int) or account ID Guid. (required)
   * @param userId The user ID of the user being accessed. Generally this is the user ID of the
   *     authenticated user, but if the authenticated user is an Admin on the account, this may be
   *     another user the Admin user is accessing. (required)
   * @param signatureId The ID of the signature being accessed. (required)
   * @param userSignatureDefinition (optional)
   * @return UserSignature
   */
  public UserSignature updateSignature(
      String accountId,
      String userId,
      String signatureId,
      UserSignatureDefinition userSignatureDefinition)
      throws ApiException {
    return updateSignature(accountId, userId, signatureId, userSignatureDefinition, null);
  }

  /**
   * Updates the user signature for a specified user.. Creates, or updates, the signature font and
   * initials for the specified user. When creating a signature, you use this resource to create the
   * signature name and then add the signature and initials images into the signature. ###### Note:
   * This will also create a default signature for the user when one does not exist. The userId
   * property specified in the endpoint must match the authenticated user's user ID and the user
   * must be a member of the account. The `signatureId` parameter accepts a signature ID
   * or a signature name. DocuSign recommends you use signature ID (`signatureId`), since
   * some names contain characters that do not properly encode into a URL. If you use the user name,
   * it is likely that the name includes spaces. In that case, URL encode the name before using it
   * in the endpoint. For example encode \"Bob Smith\" as \"Bob%20Smith\".
   *
   * @param accountId The external account number (int) or account ID Guid. (required)
   * @param userId The user ID of the user being accessed. Generally this is the user ID of the
   *     authenticated user, but if the authenticated user is an Admin on the account, this may be
   *     another user the Admin user is accessing. (required)
   * @param signatureId The ID of the signature being accessed. (required)
   * @param userSignatureDefinition (optional)
   * @param options for modifying the method behavior.
   * @return UserSignature
   * @throws ApiException if fails to make API call
   */
  public UserSignature updateSignature(
      String accountId,
      String userId,
      String signatureId,
      UserSignatureDefinition userSignatureDefinition,
      UsersApi.UpdateSignatureOptions options)
      throws ApiException {
    ApiResponse localVarResponse =
        updateSignatureWithHttpInfo(
            accountId, userId, signatureId, userSignatureDefinition, options);
    return localVarResponse.getData();
  }

  /**
   * Updates the user signature for a specified user. Creates, or updates, the signature font and
   * initials for the specified user. When creating a signature, you use this resource to create the
   * signature name and then add the signature and initials images into the signature. ###### Note:
   * This will also create a default signature for the user when one does not exist. The userId
   * property specified in the endpoint must match the authenticated user's user ID and the user
   * must be a member of the account. The `signatureId` parameter accepts a signature ID
   * or a signature name. DocuSign recommends you use signature ID (`signatureId`), since
   * some names contain characters that do not properly encode into a URL. If you use the user name,
   * it is likely that the name includes spaces. In that case, URL encode the name before using it
   * in the endpoint. For example encode \"Bob Smith\" as \"Bob%20Smith\".
   *
   * @param accountId The external account number (int) or account ID Guid. (required)
   * @param userId The user ID of the user being accessed. Generally this is the user ID of the
   *     authenticated user, but if the authenticated user is an Admin on the account, this may be
   *     another user the Admin user is accessing. (required)
   * @param signatureId The ID of the signature being accessed. (required)
   * @param userSignatureDefinition (optional)
   * @param options for modifying the method behavior.
   * @return UserSignature
   * @throws ApiException if fails to make API call
   */
  public ApiResponse updateSignatureWithHttpInfo(
      String accountId,
      String userId,
      String signatureId,
      UserSignatureDefinition userSignatureDefinition,
      UsersApi.UpdateSignatureOptions options)
      throws ApiException {
    Object localVarPostBody = userSignatureDefinition;

    // verify the required parameter 'accountId' is set
    if (accountId == null) {
      throw new ApiException(
          400, "Missing the required parameter 'accountId' when calling updateSignature");
    }

    // verify the required parameter 'userId' is set
    if (userId == null) {
      throw new ApiException(
          400, "Missing the required parameter 'userId' when calling updateSignature");
    }

    // verify the required parameter 'signatureId' is set
    if (signatureId == null) {
      throw new ApiException(
          400, "Missing the required parameter 'signatureId' when calling updateSignature");
    }

    // create path and map variables
    String localVarPath =
        "/v2.1/accounts/{accountId}/users/{userId}/signatures/{signatureId}"
            .replaceAll("\\{" + "accountId" + "\\}", apiClient.escapeString(accountId.toString()))
            .replaceAll("\\{" + "userId" + "\\}", apiClient.escapeString(userId.toString()))
            .replaceAll(
                "\\{" + "signatureId" + "\\}", apiClient.escapeString(signatureId.toString()));

    // query params
    java.util.List localVarQueryParams = new java.util.ArrayList();
    java.util.List localVarCollectionQueryParams = new java.util.ArrayList();
    java.util.Map localVarHeaderParams = new java.util.HashMap();
    java.util.Map localVarFormParams = new java.util.HashMap();

    if (options != null) {
      localVarQueryParams.addAll(
          apiClient.parameterToPair("close_existing_signature", options.closeExistingSignature));
    }

    final String[] localVarAccepts = {"application/json"};
    final String localVarAccept = apiClient.selectHeaderAccept(localVarAccepts);

    final String[] localVarContentTypes = {};

    final String localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes);

    String[] localVarAuthNames = new String[] {"docusignAccessCode"};

    GenericType localVarReturnType = new GenericType() {};
    UserSignature localVarResponse =
        apiClient.invokeAPI(
            localVarPath,
            "PUT",
            localVarQueryParams,
            localVarCollectionQueryParams,
            localVarPostBody,
            localVarHeaderParams,
            localVarFormParams,
            localVarAccept,
            localVarContentType,
            localVarAuthNames,
            localVarReturnType);
    return new ApiResponse(
        apiClient.getStatusCode(), apiClient.getResponseHeaders(), localVarResponse);
  }
  /// 
  /// Updates the user signature image or user initials image for the specified user. Updates the
  // user signature image or user initials image for the specified user. The supported image formats
  // for this file are: gif, png, jpeg, and bmp. The file must be less than 200K.  The userId
  // property specified in the endpoint must match the authenticated user's user ID and the user
  // must be a member of the account.  The `signatureId` parameter accepts a signature ID
  // or a signature name. DocuSign recommends you use signature ID (`signatureId`), since
  // some names contain characters that do not properly encode into a URL. If you use the user name,
  // it is likely that the name includes spaces. In that case, URL encode the name before using it
  // in the endpoint.   For example encode \"Bob Smith\" as \"Bob%20Smith\".
  /// 

  /** UpdateSignatureImageOptions Class. */
  public class UpdateSignatureImageOptions {
    private String transparentPng = null;

    /** setTransparentPng method. */
    public void setTransparentPng(String transparentPng) {
      this.transparentPng = transparentPng;
    }

    /**
     * getTransparentPng method.
     *
     * @return String
     */
    public String getTransparentPng() {
      return this.transparentPng;
    }
  }

  /**
   * Updates the user signature image or user initials image for the specified user.. Updates the
   * user signature image or user initials image for the specified user. The supported image formats
   * for this file are: gif, png, jpeg, and bmp. The file must be less than 200K. The userId
   * property specified in the endpoint must match the authenticated user's user ID and the user
   * must be a member of the account. The `signatureId` parameter accepts a signature ID
   * or a signature name. DocuSign recommends you use signature ID (`signatureId`), since
   * some names contain characters that do not properly encode into a URL. If you use the user name,
   * it is likely that the name includes spaces. In that case, URL encode the name before using it
   * in the endpoint. For example encode \"Bob Smith\" as \"Bob%20Smith\".
   *
   * @param accountId The external account number (int) or account ID Guid. (required)
   * @param userId The user ID of the user being accessed. Generally this is the user ID of the
   *     authenticated user, but if the authenticated user is an Admin on the account, this may be
   *     another user the Admin user is accessing. (required)
   * @param signatureId The ID of the signature being accessed. (required)
   * @param imageType One of **signature_image** or **initials_image**. (required)
   * @param imageBytes Updated image content. (required)
   * @return UserSignature
   */
  public UserSignature updateSignatureImage(
      String accountId, String userId, String signatureId, String imageType, byte[] imageBytes)
      throws ApiException {
    return updateSignatureImage(accountId, userId, signatureId, imageType, imageBytes, null);
  }

  /**
   * Updates the user signature image or user initials image for the specified user.. Updates the
   * user signature image or user initials image for the specified user. The supported image formats
   * for this file are: gif, png, jpeg, and bmp. The file must be less than 200K. The userId
   * property specified in the endpoint must match the authenticated user's user ID and the user
   * must be a member of the account. The `signatureId` parameter accepts a signature ID
   * or a signature name. DocuSign recommends you use signature ID (`signatureId`), since
   * some names contain characters that do not properly encode into a URL. If you use the user name,
   * it is likely that the name includes spaces. In that case, URL encode the name before using it
   * in the endpoint. For example encode \"Bob Smith\" as \"Bob%20Smith\".
   *
   * @param accountId The external account number (int) or account ID Guid. (required)
   * @param userId The user ID of the user being accessed. Generally this is the user ID of the
   *     authenticated user, but if the authenticated user is an Admin on the account, this may be
   *     another user the Admin user is accessing. (required)
   * @param signatureId The ID of the signature being accessed. (required)
   * @param imageType One of **signature_image** or **initials_image**. (required)
   * @param imageBytes Updated image content. (required)
   * @param options for modifying the method behavior.
   * @return UserSignature
   * @throws ApiException if fails to make API call
   */
  public UserSignature updateSignatureImage(
      String accountId,
      String userId,
      String signatureId,
      String imageType,
      byte[] imageBytes,
      UsersApi.UpdateSignatureImageOptions options)
      throws ApiException {
    ApiResponse localVarResponse =
        updateSignatureImageWithHttpInfo(
            accountId, userId, signatureId, imageType, imageBytes, options);
    return localVarResponse.getData();
  }

  /**
   * Updates the user signature image or user initials image for the specified user. Updates the
   * user signature image or user initials image for the specified user. The supported image formats
   * for this file are: gif, png, jpeg, and bmp. The file must be less than 200K. The userId
   * property specified in the endpoint must match the authenticated user's user ID and the user
   * must be a member of the account. The `signatureId` parameter accepts a signature ID
   * or a signature name. DocuSign recommends you use signature ID (`signatureId`), since
   * some names contain characters that do not properly encode into a URL. If you use the user name,
   * it is likely that the name includes spaces. In that case, URL encode the name before using it
   * in the endpoint. For example encode \"Bob Smith\" as \"Bob%20Smith\".
   *
   * @param accountId The external account number (int) or account ID Guid. (required)
   * @param userId The user ID of the user being accessed. Generally this is the user ID of the
   *     authenticated user, but if the authenticated user is an Admin on the account, this may be
   *     another user the Admin user is accessing. (required)
   * @param signatureId The ID of the signature being accessed. (required)
   * @param imageType One of **signature_image** or **initials_image**. (required)
   * @param imageBytes Updated image content. (required)
   * @param options for modifying the method behavior.
   * @return UserSignature
   * @throws ApiException if fails to make API call
   */
  public ApiResponse updateSignatureImageWithHttpInfo(
      String accountId,
      String userId,
      String signatureId,
      String imageType,
      byte[] imageBytes,
      UsersApi.UpdateSignatureImageOptions options)
      throws ApiException {
    Object localVarPostBody = imageBytes;

    // verify the required parameter 'accountId' is set
    if (accountId == null) {
      throw new ApiException(
          400, "Missing the required parameter 'accountId' when calling updateSignatureImage");
    }

    // verify the required parameter 'userId' is set
    if (userId == null) {
      throw new ApiException(
          400, "Missing the required parameter 'userId' when calling updateSignatureImage");
    }

    // verify the required parameter 'signatureId' is set
    if (signatureId == null) {
      throw new ApiException(
          400, "Missing the required parameter 'signatureId' when calling updateSignatureImage");
    }

    // verify the required parameter 'imageType' is set
    if (imageType == null) {
      throw new ApiException(
          400, "Missing the required parameter 'imageType' when calling updateSignatureImage");
    }

    // verify the required parameter 'imageBytes' is set
    if (imageBytes == null) {
      throw new ApiException(
          400, "Missing the required parameter 'imageBytes' when calling updateSignatureImage");
    }

    // create path and map variables
    String localVarPath =
        "/v2.1/accounts/{accountId}/users/{userId}/signatures/{signatureId}/{imageType}"
            .replaceAll("\\{" + "accountId" + "\\}", apiClient.escapeString(accountId.toString()))
            .replaceAll("\\{" + "userId" + "\\}", apiClient.escapeString(userId.toString()))
            .replaceAll(
                "\\{" + "signatureId" + "\\}", apiClient.escapeString(signatureId.toString()))
            .replaceAll("\\{" + "imageType" + "\\}", apiClient.escapeString(imageType.toString()));

    // query params
    java.util.List localVarQueryParams = new java.util.ArrayList();
    java.util.List localVarCollectionQueryParams = new java.util.ArrayList();
    java.util.Map localVarHeaderParams = new java.util.HashMap();
    java.util.Map localVarFormParams = new java.util.HashMap();

    if (options != null) {
      localVarQueryParams.addAll(
          apiClient.parameterToPair("transparent_png", options.transparentPng));
    }

    final String[] localVarAccepts = {"application/json"};
    final String localVarAccept = apiClient.selectHeaderAccept(localVarAccepts);

    final String[] localVarContentTypes = {"image/gif"};
    final String localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes);

    String[] localVarAuthNames = new String[] {"docusignAccessCode"};

    GenericType localVarReturnType = new GenericType() {};
    UserSignature localVarResponse =
        apiClient.invokeAPI(
            localVarPath,
            "PUT",
            localVarQueryParams,
            localVarCollectionQueryParams,
            localVarPostBody,
            localVarHeaderParams,
            localVarFormParams,
            localVarAccept,
            localVarContentType,
            localVarAuthNames,
            localVarReturnType);
    return new ApiResponse(
        apiClient.getStatusCode(), apiClient.getResponseHeaders(), localVarResponse);
  }

  /**
   * Adds/updates a user signature..
   *
   * @param accountId The external account number (int) or account ID Guid. (required)
   * @param userId The user ID of the user being accessed. Generally this is the user ID of the
   *     authenticated user, but if the authenticated user is an Admin on the account, this may be
   *     another user the Admin user is accessing. (required)
   * @param userSignaturesInformation (optional)
   * @return UserSignaturesInformation
   * @throws ApiException if fails to make API call
   */
  public UserSignaturesInformation updateSignatures(
      String accountId, String userId, UserSignaturesInformation userSignaturesInformation)
      throws ApiException {
    ApiResponse localVarResponse =
        updateSignaturesWithHttpInfo(accountId, userId, userSignaturesInformation);
    return localVarResponse.getData();
  }

  /**
   * Adds/updates a user signature.
   *
   * @param accountId The external account number (int) or account ID Guid. (required)
   * @param userId The user ID of the user being accessed. Generally this is the user ID of the
   *     authenticated user, but if the authenticated user is an Admin on the account, this may be
   *     another user the Admin user is accessing. (required)
   * @param userSignaturesInformation (optional)
   * @return UserSignaturesInformation
   * @throws ApiException if fails to make API call
   */
  public ApiResponse updateSignaturesWithHttpInfo(
      String accountId, String userId, UserSignaturesInformation userSignaturesInformation)
      throws ApiException {
    Object localVarPostBody = userSignaturesInformation;

    // verify the required parameter 'accountId' is set
    if (accountId == null) {
      throw new ApiException(
          400, "Missing the required parameter 'accountId' when calling updateSignatures");
    }

    // verify the required parameter 'userId' is set
    if (userId == null) {
      throw new ApiException(
          400, "Missing the required parameter 'userId' when calling updateSignatures");
    }

    // create path and map variables
    String localVarPath =
        "/v2.1/accounts/{accountId}/users/{userId}/signatures"
            .replaceAll("\\{" + "accountId" + "\\}", apiClient.escapeString(accountId.toString()))
            .replaceAll("\\{" + "userId" + "\\}", apiClient.escapeString(userId.toString()));

    // query params
    java.util.List localVarQueryParams = new java.util.ArrayList();
    java.util.List localVarCollectionQueryParams = new java.util.ArrayList();
    java.util.Map localVarHeaderParams = new java.util.HashMap();
    java.util.Map localVarFormParams = new java.util.HashMap();

    final String[] localVarAccepts = {"application/json"};
    final String localVarAccept = apiClient.selectHeaderAccept(localVarAccepts);

    final String[] localVarContentTypes = {};

    final String localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes);

    String[] localVarAuthNames = new String[] {"docusignAccessCode"};

    GenericType localVarReturnType =
        new GenericType() {};
    UserSignaturesInformation localVarResponse =
        apiClient.invokeAPI(
            localVarPath,
            "PUT",
            localVarQueryParams,
            localVarCollectionQueryParams,
            localVarPostBody,
            localVarHeaderParams,
            localVarFormParams,
            localVarAccept,
            localVarContentType,
            localVarAuthNames,
            localVarReturnType);
    return new ApiResponse(
        apiClient.getStatusCode(), apiClient.getResponseHeaders(), localVarResponse);
  }
  /// 
  /// Updates the specified user information. To update user information for a specific user, submit
  // a [Users](#Users) object with updated field values in the request body of this operation.
  /// 

  /** UpdateUserOptions Class. */
  public class UpdateUserOptions {
    private String allowAllLanguages = null;

    /** setAllowAllLanguages method. */
    public void setAllowAllLanguages(String allowAllLanguages) {
      this.allowAllLanguages = allowAllLanguages;
    }

    /**
     * getAllowAllLanguages method.
     *
     * @return String
     */
    public String getAllowAllLanguages() {
      return this.allowAllLanguages;
    }
  }

  /**
   * Updates the specified user information.. To update user information for a specific user, submit
   * a [Users](#Users) object with updated field values in the request body of this operation.
   *
   * @param accountId The external account number (int) or account ID Guid. (required)
   * @param userId The user ID of the user being accessed. Generally this is the user ID of the
   *     authenticated user, but if the authenticated user is an Admin on the account, this may be
   *     another user the Admin user is accessing. (required)
   * @param userInformation (optional)
   * @return UserInformation
   */
  public UserInformation updateUser(
      String accountId, String userId, UserInformation userInformation) throws ApiException {
    return updateUser(accountId, userId, userInformation, null);
  }

  /**
   * Updates the specified user information.. To update user information for a specific user, submit
   * a [Users](#Users) object with updated field values in the request body of this operation.
   *
   * @param accountId The external account number (int) or account ID Guid. (required)
   * @param userId The user ID of the user being accessed. Generally this is the user ID of the
   *     authenticated user, but if the authenticated user is an Admin on the account, this may be
   *     another user the Admin user is accessing. (required)
   * @param userInformation (optional)
   * @param options for modifying the method behavior.
   * @return UserInformation
   * @throws ApiException if fails to make API call
   */
  public UserInformation updateUser(
      String accountId,
      String userId,
      UserInformation userInformation,
      UsersApi.UpdateUserOptions options)
      throws ApiException {
    ApiResponse localVarResponse =
        updateUserWithHttpInfo(accountId, userId, userInformation, options);
    return localVarResponse.getData();
  }

  /**
   * Updates the specified user information. To update user information for a specific user, submit
   * a [Users](#Users) object with updated field values in the request body of this operation.
   *
   * @param accountId The external account number (int) or account ID Guid. (required)
   * @param userId The user ID of the user being accessed. Generally this is the user ID of the
   *     authenticated user, but if the authenticated user is an Admin on the account, this may be
   *     another user the Admin user is accessing. (required)
   * @param userInformation (optional)
   * @param options for modifying the method behavior.
   * @return UserInformation
   * @throws ApiException if fails to make API call
   */
  public ApiResponse updateUserWithHttpInfo(
      String accountId,
      String userId,
      UserInformation userInformation,
      UsersApi.UpdateUserOptions options)
      throws ApiException {
    Object localVarPostBody = userInformation;

    // verify the required parameter 'accountId' is set
    if (accountId == null) {
      throw new ApiException(
          400, "Missing the required parameter 'accountId' when calling updateUser");
    }

    // verify the required parameter 'userId' is set
    if (userId == null) {
      throw new ApiException(
          400, "Missing the required parameter 'userId' when calling updateUser");
    }

    // create path and map variables
    String localVarPath =
        "/v2.1/accounts/{accountId}/users/{userId}"
            .replaceAll("\\{" + "accountId" + "\\}", apiClient.escapeString(accountId.toString()))
            .replaceAll("\\{" + "userId" + "\\}", apiClient.escapeString(userId.toString()));

    // query params
    java.util.List localVarQueryParams = new java.util.ArrayList();
    java.util.List localVarCollectionQueryParams = new java.util.ArrayList();
    java.util.Map localVarHeaderParams = new java.util.HashMap();
    java.util.Map localVarFormParams = new java.util.HashMap();

    if (options != null) {
      localVarQueryParams.addAll(
          apiClient.parameterToPair("allow_all_languages", options.allowAllLanguages));
    }

    final String[] localVarAccepts = {"application/json"};
    final String localVarAccept = apiClient.selectHeaderAccept(localVarAccepts);

    final String[] localVarContentTypes = {};

    final String localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes);

    String[] localVarAuthNames = new String[] {"docusignAccessCode"};

    GenericType localVarReturnType = new GenericType() {};
    UserInformation localVarResponse =
        apiClient.invokeAPI(
            localVarPath,
            "PUT",
            localVarQueryParams,
            localVarCollectionQueryParams,
            localVarPostBody,
            localVarHeaderParams,
            localVarFormParams,
            localVarAccept,
            localVarContentType,
            localVarAuthNames,
            localVarReturnType);
    return new ApiResponse(
        apiClient.getStatusCode(), apiClient.getResponseHeaders(), localVarResponse);
  }
  /// 
  /// Change one or more user in the specified account. This method updates the information about
  // one or more account users.
  /// 

  /** UpdateUsersOptions Class. */
  public class UpdateUsersOptions {
    private String allowAllLanguages = null;

    /** setAllowAllLanguages method. */
    public void setAllowAllLanguages(String allowAllLanguages) {
      this.allowAllLanguages = allowAllLanguages;
    }

    /**
     * getAllowAllLanguages method.
     *
     * @return String
     */
    public String getAllowAllLanguages() {
      return this.allowAllLanguages;
    }
  }

  /**
   * Change one or more user in the specified account.. This method updates the information about
   * one or more account users.
   *
   * @param accountId The external account number (int) or account ID Guid. (required)
   * @param userInformationList (optional)
   * @return UserInformationList
   */
  public UserInformationList updateUsers(String accountId, UserInformationList userInformationList)
      throws ApiException {
    return updateUsers(accountId, userInformationList, null);
  }

  /**
   * Change one or more user in the specified account.. This method updates the information about
   * one or more account users.
   *
   * @param accountId The external account number (int) or account ID Guid. (required)
   * @param userInformationList (optional)
   * @param options for modifying the method behavior.
   * @return UserInformationList
   * @throws ApiException if fails to make API call
   */
  public UserInformationList updateUsers(
      String accountId,
      UserInformationList userInformationList,
      UsersApi.UpdateUsersOptions options)
      throws ApiException {
    ApiResponse localVarResponse =
        updateUsersWithHttpInfo(accountId, userInformationList, options);
    return localVarResponse.getData();
  }

  /**
   * Change one or more user in the specified account. This method updates the information about one
   * or more account users.
   *
   * @param accountId The external account number (int) or account ID Guid. (required)
   * @param userInformationList (optional)
   * @param options for modifying the method behavior.
   * @return UserInformationList
   * @throws ApiException if fails to make API call
   */
  public ApiResponse updateUsersWithHttpInfo(
      String accountId,
      UserInformationList userInformationList,
      UsersApi.UpdateUsersOptions options)
      throws ApiException {
    Object localVarPostBody = userInformationList;

    // verify the required parameter 'accountId' is set
    if (accountId == null) {
      throw new ApiException(
          400, "Missing the required parameter 'accountId' when calling updateUsers");
    }

    // create path and map variables
    String localVarPath =
        "/v2.1/accounts/{accountId}/users"
            .replaceAll("\\{" + "accountId" + "\\}", apiClient.escapeString(accountId.toString()));

    // query params
    java.util.List localVarQueryParams = new java.util.ArrayList();
    java.util.List localVarCollectionQueryParams = new java.util.ArrayList();
    java.util.Map localVarHeaderParams = new java.util.HashMap();
    java.util.Map localVarFormParams = new java.util.HashMap();

    if (options != null) {
      localVarQueryParams.addAll(
          apiClient.parameterToPair("allow_all_languages", options.allowAllLanguages));
    }

    final String[] localVarAccepts = {"application/json"};
    final String localVarAccept = apiClient.selectHeaderAccept(localVarAccepts);

    final String[] localVarContentTypes = {};

    final String localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes);

    String[] localVarAuthNames = new String[] {"docusignAccessCode"};

    GenericType localVarReturnType = new GenericType() {};
    UserInformationList localVarResponse =
        apiClient.invokeAPI(
            localVarPath,
            "PUT",
            localVarQueryParams,
            localVarCollectionQueryParams,
            localVarPostBody,
            localVarHeaderParams,
            localVarFormParams,
            localVarAccept,
            localVarContentType,
            localVarAuthNames,
            localVarReturnType);
    return new ApiResponse(
        apiClient.getStatusCode(), apiClient.getResponseHeaders(), localVarResponse);
  }
}