code: public Transaction createWithPreauthorization( String preauthorizationId, Integer amount, String currency, String description ) {
      ValidationUtils.validatesId( preauthorizationId );
      ValidationUtils.validatesAmount( amount );
      ValidationUtils.validatesCurrency( currency );
  
      ParameterMap<String, String> params = new ParameterMap<String, String>();
      params.add( "preauthorization", preauthorizationId );
      params.add( "amount", String.valueOf( amount ) );
      params.add( "currency", currency );
      params.add( "source", String.format( "%s-%s", PaymillContext.getProjectName(), PaymillContext.getProjectVersion() ) );
  
      if( StringUtils.isNotBlank( description ) )
        params.add( "description", description );
  
      return RestfulUtils.create( TransactionService.PATH, params, Transaction.class, super.httpClient );
    }
docs: Executes a {@link Transaction} with {@link Preauthorization} for the given amount in the given currency.
  @param preauthorizationId
  The Id of a {@link Preauthorization}, which has reserved some money from the client’s credit card.
  @param amount
  Amount (in cents) which will be charged.
  @param currency
  ISO 4217 formatted currency code.
  @param description
  A short description for the transaction.
  @return {@link Transaction} object indicating whether a the call was successful or not.