RPC error -32015

Transaction version (1) is not supported by the requesting client

Your code asked the RPC for transactions up to version 0, and the transaction it wanted is version 1. The RPC refuses it instead of answering. The fix is one setting, plus a library new enough to read the answer.

Check a transaction

Paste the signature your code can't read. Solana Pulse's tx_version tool reads it from mainnet and says which version it is and what can read it.

No signature handy? . Free: 25 checks a day.

The fix

Ask for version 1 wherever you read transactions or blocks other people built: getTransaction, getParsedTransaction(s) and getBlock. Legacy and version 0 transactions still come back exactly as before.

JSON-RPC (any language)
{"jsonrpc":"2.0","id":1,"method":"getTransaction",
 "params":["<signature>",{"encoding":"json","maxSupportedTransactionVersion":1}]}
@solana/web3.js 1.99.0 or later
// npm install @solana/web3.js@^1.99.0   (1.98.x throws on version 1 even with this setting)
const tx = await connection.getTransaction(signature, { maxSupportedTransactionVersion: 1 });
const parsed = await connection.getParsedTransaction(signature, { maxSupportedTransactionVersion: 1 });
const block = await connection.getBlock(slot, { maxSupportedTransactionVersion: 1 });
@solana/kit 7.1.0 or later
const tx = await rpc.getTransaction(signature, { maxSupportedTransactionVersion: 1 }).send();
// Before 7.1.0, tx.version comes back as the bigint 1n, so  tx.version === 1  is false.
Python (solana-py)
client.get_transaction(signature, max_supported_transaction_version=1)
Rust (solana-client)
let config = RpcTransactionConfig {
    max_supported_transaction_version: Some(1),
    ..RpcTransactionConfig::default()
};
client.get_transaction_with_config(&signature, config)?;

Which library versions can read version 1

Each version was installed fresh and asked for the same real version 1 transaction (slot 463,371,847) on mainnet on 2026-10-30. Asking correctly isn't always enough: older web3.js rejects the answer it gets.

LibraryVersions testedWith max version 1
@solana/web3.js1.95.8, 1.98.0, 1.98.4Throws on getTransaction, getParsedTransaction and getBlock, even with maxSupportedTransactionVersion: 1
@solana/web3.js1.99.0, 3.0.0, 3.1.1Works. 1.99.0 is the first 1.x that reads version 1
@solana/web3.js1.87.6, 1.91.8Unknown: they no longer install cleanly, so they could not be tested
@solana/kit (and web3.js 2.0.0)2.1.0 to 7.0.0Returns the transaction, but version is the bigint 1n, not the number 1. Its types reject maxSupportedTransactionVersion: 1 before 6.10.0
@solana/kit7.1.0, 7.1.1, 8.0.0, 8.6.0Works
solana-py (with solders)0.30.2 to 0.41.0Works with max_supported_transaction_version=1
Rust solana-clientallUnknown: not tested yet. The setting is max_supported_transaction_version: Some(1)
Every library aboveAsking for version 0 always fails with -32015 (the control check)

Traps that look like other bugs

  • One bad entry breaks a whole batch. getParsedTransactions and getTransactions in web3.js throw for the whole list when one transaction fails, so one version 1 payment can hide 49 others. Read them one by one, or fix the setting.
  • "Not found" that is really "refused". Code that catches the error and returns null reports a paid, confirmed transaction as missing.
  • version === 1 is false on @solana/kit before 7.1.0, because the value is the bigint 1n.
  • Raw bytes start differently. A version 1 transaction starts with the byte 0x81 before anything else; legacy and version 0 start with the signature count. Parsers that read the bytes the old way break too.

How common version 1 is

Version 1 went live on mainnet on 2026-09-15 (the first one we found is in slot 447,120,004). In sampled mainnet blocks it was 13.8% of non-vote transactions the week of Sep 14 and 41.9% from Oct 16 to 30 (44.4% of swaps). Whether your code sees one depends only on which wallet or SDK the sender used, so a payment, deposit or trade can fail for one customer and work for the next.

For agents

Agents can call the same check over MCP or HTTP: tx_version with {"tx_id": "<signature>"}. See Connect an agent.