Asynchronous lightweight JSON API
From a once over:


Not sure why you are not parsing the querystring for GET requests? It seems wrong
if(data.length &lt; postMaxSize &amp;&amp; postTotalReceived &lt; postMaxSize) could be if(data.length + postTotalReceived &lt; postMaxSize)
Not sure what happens in your code after setting the 413, it seems you have some loose ends there. You could consider redefining callback to function(){}
I would not store the routes as an array, the lookup time is too slow in my mind, instead I would store the routes in an object like this:

api.addRoute = function(route){
  routes[route.method][route.url] = route;
}

I read your code several times, it seems as if even if the method of a route does not match you will still execute the route if the url matches through a regex. If so, then that is completely wrong.