In XDI, we have done a lot of work on the kinds of interactions you are describing. We have “connection requests” (I ask something from you) and “connection invitations” (I offer something to you) to establish “link contracts” between entities in various ways. These requests can be manually approved/rejected, or automatically approved/rejected based on policies. Link contracts can have “push” semantics, i.e. if data covered by a link contract changes, it is pushed to subscribers.
You can see some of this in this video (forward to minute 2:12 if you just want to see the part about subscribing):