I note that "API" refers to the interface and related tools provided by some kind of library/framework, or in the sense you're thinking of, external software (or more specifically, web services).
That said, if we only consider APIs for web services, I agree with your points except for "flexible interfaces", by which you actually mean flexible data exchange/transport formats: I don't think that it is important to provide multiple formats. It can be a nice thing to have, but from the Zen of Python: "There should be one-- and preferably only one --obvious way to do it."
For "code libraries", I suggest providing a pseudo-RESTful interface. I prefix with pseudo because few people follow REST properly, and in the end it might not actually matter anyway. From this interface, you (or interested third parties) can always write wrappers in target languages.
For authentication and authorisation, I think oauth2 bearer token over TLS is a good compromise: it doesn't seem so complicated as other schemes in use, yet it isn't so problematic as having to pass fixed credentials with every request (not that the token isn't fixed, but it is more easily renewed).