code: public Preauthorization createWithToken( final String token, final Integer amount, final String currency, final String description ) {
      ValidationUtils.validatesToken( token );
      ValidationUtils.validatesAmount( amount );
      ValidationUtils.validatesCurrency( currency );
  
      ParameterMap<String, String> params = new ParameterMap<String, String>();
  
      params.add( "token", token );
      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( PreauthorizationService.PATH, params, Preauthorization.class, super.httpClient );
    }
docs: Creates Use either a token or an existing payment to Authorizes the given amount with the given token.
  @param token
  The identifier of a token.
  @param amount
  Amount (in cents) which will be charged.
  @param currency
  ISO 4217 formatted currency code.
  @param description
  A short description for the preauthorization.
  @return {@link Transaction} object with the {@link Preauthorization} as sub object.