A few years back I was hired by a third party to build a system to break the CAPTCHA on a popular site for various evil deeds. Morals set aside, the money was good and I had a wedding to pay for. A CAPTCHA system becomes quite breakable when it becomes predictable. The system in question used an image based CAPTCHA that used the same (albeit annoying) font for each image, as well as a static distortion overlay and a second set of random distortion. By extracting a thousand sample images I was able to build a system in Perl that could determine the text with an estimated 98% success rate - and when it failed you would just request a new CAPTCHA.
My solution would be to mix up images with logic. I.E.
In the following list of images, which image number contains the green animal: {pic of zebra}, {pic of frog}, {pic of giraffe}
This would require image recognition as well as logic.
The amount of effort for a human to go through the list of answers and come up with answers may be non-trivial, but once completed it's applicable to every single use of the plain-text captcha system. That's bad.
Just tell me if you need the source code ;P
It might be interesting to come up with a methodology for question structure that is harder for algorithms to interpret...?
They provide an API, but I think this is a case of a project being a "service" to keep the database of questions from being free. There's no technical reason for this to be a service, and it's not a terribly complicated product that would be difficult to scale. It's a static database!
Might be neat to create an open-source bank of these CAPTCHA questions. Maybe I'll throw something together this weekend.