code: public <T> T execute(String token, WePayRequest<T> req) throws IOException, WePayException {
  
  		String uri = currentUrl + req.getEndpoint();
  
  		String postJson = MAPPER.writeValueAsString(req);
  
  		if (log.isTraceEnabled()) {
  			log.trace("request to {}:  {}", uri, postJson);
  		}
  
  		// Use the data provider to get an input stream response. This is faked out in tests.
  		InputStream is = dataProvider.getData(uri, postJson, token);
  
  		JsonNode resp;
  		if (log.isTraceEnabled()) {
  			String results = IOUtils.toString(is);
  			log.trace("response: " + results);
  			resp = MAPPER.readTree(results);
  		} else {
  			resp = MAPPER.readTree(is);
  		}
  
  		// if there is an error in the response from wepay, it'll get thrown in this call.
  		this.checkForError(resp);
  
  		// This is a little bit of black magic with jackson.  We know that any request passed extends
  		// the abstract WePayRequest and de-genericizes it.  This means the concrete class has full
  		// generic type information, and we can use this to determine what type to deserialize.  The
  		// trickiest case is WePayAccountFindRequest, whose response type is List<AccountWithUri>.
  		ParameterizedType paramType = (ParameterizedType)req.getClass().getGenericSuperclass();
  		JavaType type = MAPPER.constructType(paramType.getActualTypeArguments()[0]);
  
  		return MAPPER.readValue(MAPPER.treeAsTokens(resp), type);
  	}
docs: Make API calls against authenticated user.
  Turn up logging to trace level to see the request / response.