Using the SDKs, you can create a transaction object (e.g. a CryptoTransferTransaction) and convert it to bytes which you can then turn to base64 or any encoding of your choice using available libraries.
The receiver of the base64 payload can then convert back to bytes and deserialize (e.g. const transaction = Transaction.fromBytes(transactionBytes);) the transaction back to an object.
You may find these examples useful:
https://github.com/hashgraph/hedera-sdk-js/blob/develop/examples/schedule-example.js
and
https://github.com/hashgraph/hedera-sdk-js/blob/develop/examples/multi-sig-offline.js
Also note that ScheduleGetInfoQuery
will return the body of the transaction that's been scheduled, so you can technically share the scheduleId
alone, the other party can pull the transaction and sign it after verifying it does correspond to their expectations.