Some of the functions take a metric ton of arguments, most of which have sensible defaults, which someone writing a simple client might not know for sure. The client writer can probably guess, but they shouldn't have to and it makes the code quite unwieldy.
Where the protocol requires an argument, we should generate
let f ?(x = Reasonable_default)
Where the protocol allows an argument to be omitted, we should generate