public String[] call(CallExecutor callExecutor, String... variables) throws APIException, IOException {
		if (callExecutor == null)
			throw new IllegalArgumentException("callExecutor cannot be null");
		if (getVariableCount() != -1 && getVariableCount() != variables.length)
			throw new APIException("You need to specify exactly " + getVariableCount() + " variables for this call. Got " + variables.length + ".");

		String[] result = callExecutor.call(getCode(), variables);

		if (result.length < 1)
			throw new APIException("The result doesn't contain at least one parameter.");
		if (!Util.matchesResultID(result[0]) || !result[0].startsWith(getCode()))
			throw new APIException("The call didn't return a proper result ID. Got '" + result[0] + "', expected '" + this.code + "_dddddd'.");

		return result;
	}