Function MakeJsonCall String sVerb String sPath String sParams Handle hoBody Returns Handle
        Handle  hoJson
        Integer iOK iStatus
        Boolean bOK
        String  sData sBody
        Send Reset
        Get AddHeader "Content-Type" (psSendType(Self))                     to iOK
        Get AddHeader "Accept" (psAcceptTypes(Self))                        to iOK
        Get AddHeader "Authorization" ("Bearer" * OAuth2AccessToken(Self))  to iOK
        If (sParams <> "") ;
            Move (sPath + "?" + sParams) to sPath
        If hoBody ;
            Get Stringify of hoBody to sBody
        Get HttpVerbAddrRequest sPath (AddressOf(sBody)) (SizeOfString(sBody)) False sVerb to iOK
        If iOK Begin
            Get ResponseStatusCode  to iStatus
            Get psData              to sData
            If ((iStatus >= 200) and (iStatus < 300)) Begin
// etc.
This is in an augmented sub-class of cHttpTransfer. Obviously it has a function OAuth2AccessToken which returns that thing. Also things like psRemoteHost, piRemotePort and peTransferFlags are being set elsewhere. It also has a Reset procedure that reinitalises everything, including doing a ClearHeaders.

I get the psData (which is actually stored in a UChar array property, but it has a function psData which returns that as a string, since we no longer have to worry about argument size) prior to checking the ResponseStatusCode, so that even if the result isn't OK, I can see it to work out what went wrong.