Clarification of 'onto' field in Conduit

I’ve been looking for a way to determine the merge target of a particular diff, and discovered the useful ‘onto’ field in the API response for, and how Phabricator/Arcanist populates that field based on the upstream tracking branch. A useful feature, so thanks.
In some diffs however, that field isn’t set at all, and is absent from the json API response altogether. I’ve tried various combinations of different diff workflows, including arc diff with/without target, and git commands to set upstream branch.

What’s the logic behind that field, and specifically, what situation causes that field to be absent entirely?