A set of software facilities that enables programmers to develop programs which interact with the software that provides the interface. For example, a word processor might have an application programming interface that allows a programmer to enhance and customize it.