Yes, the EMS supports all of this out of the box. There is a record runtime API command which you can use to start/stop the recording of any stream. You can even set a stream to record before it is available, essentially creating a "to be recorded" list. The EMS API is exposed over both HTTP and an ASCII/Telnet interface.
The EMS also has an event notification system which provides XML and JSON RPC-like HTTP posts when a variety of events happen, including the start/stop of streams. Recording is treating just like an outbound stream which happens to be heading to a disk instead of the network, so you will receive events on recording as well.