Most APIs are implemented through a formal interface meaning that there is a signature between caller and the receiver. That interface can be tightly coupled in a fashion similar to SOAP or loosely coupled as in JSON RPC. A very gray area is achieved when using mechanisms like log files to feed external processes. Log files are not meant to be arbitrary however they don’t typically adhere to the same contract that one would implement when calling functions. Log file bugs don’t typically show up till the last stages of integration test when they can do the most damage.