A particular set of rules and specifications that software programs can abide by when communicating with each other. It serves as an interface between programs and facilitates their communication, similar to the way in which a user interface facilitates communicates communication between humans and computers.