{"name":"tx_version","title":"Which transaction version is this?","category":"transactions","useWhen":"Run when code can't find or read a transaction that is on chain, or before relying on code that reads other people's transactions.","benefit":{"kind":"money","text":"Over 40% of Solana transactions are version 1 since September 15, 2026 (42% in Oct 16-30), and apps that read with version 0 silently miss them: payments rejected, trades not copied, burns not credited."},"description":"Says whether a transaction is legacy, version 0 or version 1, and which readers (RPC settings and library versions) can read it.","price":"$0.01","priceText":"25 free calls a day, then $0.01 USDC per call (x402)","http":{"method":"POST","path":"/api/tools/tx_version","body":"JSON object with the inputs below"},"mcp":{"method":"tools/call","name":"tx_version"},"inputs":[{"name":"tx_id","type":"string (base58)","required":false,"lookingFor":"A landed transaction's signature. Give this or tx.","whereToGet":"Returned when it was sent, or from history. Never make one up."},{"name":"tx","type":"string (base64)","required":false,"lookingFor":"A raw transaction, signed or not. Give this or tx_id.","whereToGet":"The bytes a wallet or builder gave you, base64-encoded."},{"name":"network","type":"\"mainnet-beta\" | \"devnet\"","required":false,"lookingFor":"Default \"mainnet-beta\" (real money).","whereToGet":"\"devnet\" only for test wallets."}],"outputs":[{"field":"version","type":"\"legacy\" | \"0\" | \"1\" | \"unknown\"","is":"The transaction's format.","howWorkedOut":"tx_id: the version the RPC reports, asked with maxSupportedTransactionVersion 1. tx: read from the first bytes (see notes)."},{"field":"readable_with_max_version_0","type":"boolean | null","is":"Whether code asking with maxSupportedTransactionVersion: 0 can read it. null when the version is unknown.","howWorkedOut":"True for legacy and 0, false for 1."},{"field":"who_can_read_it","type":"string","is":"Which RPC settings and library versions can read this format.","howWorkedOut":"Fixed text per version, from mainnet tests of each library version (2026-10-30)."},{"field":"fix","type":"string | null","is":"What to change so code reads it. null when nothing needs changing.","howWorkedOut":"Given for version 1."},{"field":"found / slot / time","type":"boolean / number | null / string | null","is":"For tx_id: whether the transaction was found, and where and when it landed.","howWorkedOut":"From getTransaction (finalized or confirmed)."},{"field":"source","type":"string","is":"Where the version came from.","howWorkedOut":"\"rpc getTransaction\" or \"transaction bytes\"."}],"notes":["Version 1 transactions start with the byte 0x81, before the signatures; legacy and version 0 start with the signature count. Code that parses raw bytes the old way breaks on version 1 too.","Version 1 went live on mainnet on 2026-09-15; the first one we found is in slot 447120004."],"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"tx_id":{"description":"A landed transaction's signature. Give this or tx. Returned when it was sent, or from history. Never make one up.","type":"string","minLength":64,"maxLength":100},"tx":{"description":"A raw transaction, signed or not. Give this or tx_id. The bytes a wallet or builder gave you, base64-encoded.","type":"string"},"network":{"default":"mainnet-beta","description":"Default \"mainnet-beta\" (real money). \"devnet\" only for test wallets.","type":"string","enum":["mainnet-beta","devnet"]}}}}