Even so, for clients to talk bare network protocol is a pain in the ass, so there has to be a layer to hide it. I see the API as supplying wrapper functions for most of the net functions. In Java, making them all blocking would not be unreasonable, although providing callback variants might make sense just for reducing thread overhead. The client side API implementation is typically going to include caching and other fun stuff too. So it's not exactly trivial.
Protocol above is the client-server one.
There should also be a server-server one that helps with redundant storage. There also needs to be a set of quick, reliable ways to map these node names to servers that can serve them. Security needs to be baked in, using public key encryption and related stuff. In this setting, the server essentially acts as a dumb disk drive, ie storing encrypted snapshots of the document, as well as encrypted log entries of mutations. A client can reconstruct the document by retrieving and decrypting the snapshot and log.