code: public void reconnectCall(
              String connId,
              String heldConnId,
              KeyValueCollection reasons,
              KeyValueCollection extensions
      ) throws WorkspaceApiException {
          try {
              VoicecallsidreconnectData reconnectData = new VoicecallsidreconnectData();
              reconnectData.setHeldConnId(heldConnId);
              reconnectData.setReasons(Util.toKVList(reasons));
              reconnectData.setExtensions(Util.toKVList(extensions));
  
              ReconnectData data = new ReconnectData();
              data.data(reconnectData);
  
              ApiSuccessResponse response = this.voiceApi.reconnect(connId, data);
              throwIfNotOk("reconnectCall", response);
          } catch (ApiException e) {
              throw new WorkspaceApiException("reconnectCall failed.", e);
          }
      }
docs: Reconnect the specified call. This releases the established call and retrieves the held call
  in one step. This is a quick way to to do `releaseCall()` and `retrieveCall()`.
  @param connId The connection ID of the established call (will be released).
  @param heldConnId The ID of the held call (will be retrieved).
  @param reasons Information on causes for, and results of, actions taken by the user of the current DN. For details about reasons, refer to the [*Genesys Events and Models Reference Manual*](https://docs.genesys.com/Documentation/System/Current/GenEM/Reasons). (optional)
  @param extensions Media device/hardware reason codes and similar information. For details about extensions, refer to the [*Genesys Events and Models Reference Manual*](https://docs.genesys.com/Documentation/System/Current/GenEM/Extensions). (optional)