Actually, it could be an issue, and with far worse consequences for the poor end user who happened to trigger the Wrath of Lending Club. Particularly if the user has a semi static IP and doesn't have the skills/desire to monkey with changing it. It would depend on how the app was designed. Rev (the author of IR) has declined to share what exactly went on when he called up to find out why his IPs were blocked so I can only guess as to how much trouble it was for him to get things going again the first time it happened.
Well, maybe. When I talked to LC about getting access to their API, their main concern was that they wanted to keep the volume of automated trades relatively small. If Rev angered the LC gods, it seems likely that it was because the volume of his trades got too high. Also, as I'll explain in a minute, what I'm referring to as "the Folio REST API" is a hook into their database that the Folio page uses to pull up the list of loans. I can't think of any reason why someone using a desktop-based client would generate so much more traffic on that page than a normal browser that it would raise any eyebrows at LC.
That sounds like a pretty serious charge... LendingClub "accidentally" exposing something to the world which was never intended to be used. And you discovered this just from "poking around" the LC site itself?
I looked through the source of the FolioFn page and I couldn't figure out how it was populating the list of loans, so I looked through all of the Javascript that it was pulling in from other parts of the site, and I found this page:
https://www.lendingclub.com/mainapp/scripts/51731/combo/e16630ef2a2773a9bec9d81415634fabcf2d0b5539cfe377087b1a414b4a0.js. Inside of that, I found this fragment:
var buildQueryString = function (oState, oSelf) {
oState = oState || {
pagination: null,
sortedBy: null
};
var sort = (oState.sortedBy) ? oState.sortedBy.key : "opa";
var dir = (oState.sortedBy && oState.sortedBy.dir === YAHOO.widget.DataTable.CLASS_DESC) ? "desc" : "asc";
var startIndex = (oState.pagination) ? oState.pagination.recordOffset : 0;
var pSize = (oState.pagination) ? oState.pagination.rowsPerPage : 15;
var myQuery = "&sortBy=" + sort + "&dir=" + dir + "&startindex=" + startIndex + "&newrdnnum=" + Math.floor(Math.random() * 100000000) + "&pagesize=" + pSize;
return myQuery
};
which lets you make queries against the Folio database.
I'm no expert on the various labels folks put on stuff these days, but it's my understanding the web itself is REST architecture. A web browser arguably uses REST all the time, nothing unique. Based on the URLs I see on the site and how the site works, you could argue that this is just how the site works. These javascript-triggered requests have to talk some language, take your pick, and I wouldn't consider normal site operation an "API" so to speak.
Yes, but you should care because the results of queries against that page look like this:
{
"result": "success",
"searchresult": {
"loans": [{
"days_since_payment": 29,
"selfNote": 0,
"accrued_interest": 0.04,
"loan_status": "Current",
"loanGrade": "B",
"asking_price": 8.25,
"isOnPayPlan": false,
"noteId": 3642501,
"ytm": "-149.76",
"outstanding_principal": "4.87",
"loanGUID": 662813,
"title": "Debt Consolidation Loan",
"markup_discount": "68.08",
"credit_score_trend": 0,
"loanClass": 36,
"checkboxes": false,
"loanRate": "10.00",
"remaining_pay": 6,
"orderId": 6551512
},
.......
{
"days_since_payment": 30,
"selfNote": 0,
"accrued_interest": 0.03,
"loan_status": "Current",
"loanGrade": "A",
"asking_price": 9.9,
"isOnPayPlan": false,
"noteId": 4227049,
"ytm": "-110.23",
"outstanding_principal": "6.14",
"loanGUID": 712319,
"title": "SPA LOAN",
"markup_discount": "60.33",
"credit_score_trend": 0,
"loanClass": 36,
"checkboxes": false,
"loanRate": "5.79",
"remaining_pay": 8,
"orderId": 6331473
}]
},
"totalRecords": 53376
}
That's JSON. I think it's significant because on this site I've seen it asserted that the only way to automate FolioFn is screen scraping. Screen scraping 53,376 pages worth of loans is prohibitively slow. Depending on how fast your internet connection is, it might take hours. If it was true that screen scraping was the only way to automate Folio, then the only kind of trading platform that could exist is what IR has now -- a huge, server-side, subscription-based service.
On the other hand, parsing JSON is fast -- you can do 53k loans in well under a minute -- and the fact that the data I've posted above exists means that it's possible to build something small and lightweight that gives control directly to the investor rather than forcing him to go through a 3rd party service like IR. It would also give people something to fall back on in case IR runs in to any more difficulties in the future.
I for one would like more information on what you have discovered and why you think it was accidental. How long have you been "poking around" on LC's site, and to what extent? Have you actually using this API or is this something you just discovered quite recently and haven't even had a chance to play with it?
See above. "Accidental" is probably too strong of a word, but the fact that it's completely undocumented and hidden inside pages of obfuscated Javascript doesn't suggest that it's something they expect anyone to use. I haven't seen anyone on here or Lending Club Talk mention it before. It provides a way to entirely avoid the terrible user interface that LC has provided for Folio users.
I haven't used it yet -- I found this yesterday during work while I was waiting for some tests to finish running. I started writing scripts to interact with it last night. I figured it was best to stick a thread up on here about it sooner rather than later because I didn't want to sink 40+ hours in to building something nice-looking that no one other than myself would ever use.