get 2 letter state/province abbreviation

In agreement with @user640118, state abbreviations don't change often, if ever, in North America. It would be best to just have a static listing of codes or abbreviations.

To answer your question, though, I've worked on one such web service called LiveAddress which provides geo/postal data via a simple REST endpoint. It's a bit more advanced, though, in the sense that it accepts an address, partial or complete, and fills it out completely and verifies it and standardizes it. You may find that to be valuable in removing duplicates and geocoding your users' data.

If you have an address, you can use this wrapper function like so, in Javascript:

LiveAddress.verify("123 main st 12345", function(results) {
   console.log(results);
});

Sample output can be found in the API docs.