unsignedTransaction is a serialized transaction, hex or base64 encoded depending on the yield, and either a legacy Transaction or a versioned (v0) VersionedTransaction. Detect both before signing; a single client that only handles one combination will fail on yields built the other way.
Prerequisites
- An action’s
transactions[]; see Transaction signing for decoding by chain family and Enter and exit flows for the request and poll loop. - A Solana keypair, or a connected wallet such as Phantom for browser signing.
Decode, sign, and submit
Solana transactions carry a recent blockhash that is only valid for a short window (about 150 blocks). If signing takes longer than that, the broadcast fails; request a new action rather than reusing the stale
unsignedTransaction.Browser wallets (Phantom)
window.phantom.solana accepts a deserialized transaction directly and signs and sends it in one call, returning { signature } rather than a separate broadcast step:
window.phantom.solana, not the window.phantom.ethereum provider used for EVM networks.
Submit the signed transaction instead
To hand yield.xyz the signed bytes rather than broadcasting yourself, callPOST /v1/transactions/{tx.id}/submit with { "signedTransaction": ... } instead of submit-hash. Use one path per transaction, never both. See Transaction signing for when each fits.
Next steps
Transaction signing
The shared contract across chain families: decode, validate, sign, submit.
Enter and exit flows
Build the request, branch on executionPattern, and poll to a terminal status.

