I do interop development with Exchange as a target.
Exchange supports an API for accessing the server. It... functions? More or less.
It's based on SOAP, which on the plus side is relatively standard, and on the minus side is a W3C XML based abomination involving more namespaces than any sane namespace would namespace if it was raining namespaces. The API is self-describing; a client can query the server for its WSDL file, which contains the description of the API, with all the methods, data types etc which it supports. It's not actually a terrible idea.
Microsoft's unique variation? The WSDL file you get from Exchange servers is syntactically invalid and needs to be manually tweaked before it'll parse correctly.