Before diving into the different ways in which you can provide APIs to those integrating or extending your application, let's review these needs through the eyes of Developer X. This is the name I give to a persona representing a consumer of your APIs and general integration and extensibility requirements. Much like its use in designing a user interface, we can use the persona concept to sense check the design and interpretation of an API.
Reviewing your integration and extensibility needs
Defining the Developer X persona
Asking a few people (internal and external to the project) to represent this persona is well worth doing, allow them to provide use cases and feedback on the features and functions of your application...