Skip to content

Bitcoin accepted at checkout  |  Ships from Montreal, QC, Canada  |  Expert support since 2016

Bitcoin PSBT Key-Type Reference (BIP-174, BIP-370, BIP-371)

Every hardware wallet, multisig coordinator and air-gapped signer speaks PSBT — but the format itself is just three key-value maps, and this page is those maps in full. All 58 registered PSBT key types with their type bytes, v0-vs-v2 inclusion rules and value contents, straight from BIP-174, BIP-370 and BIP-371. For the prose walkthrough of how a PSBT flows between signer roles, see our PSBT guide; for the wallet language PSBTs carry keys for, the output descriptors reference.

Quick answer

A PSBT (partially signed Bitcoin transaction) is a key-value map in three sections — global, per-input, per-output — that wallets, coordinators and signing devices pass around until the transaction is complete. This reference lists all 58 key types in the official registry: name, type byte, scope, the v0 (BIP-174) vs v2 (BIP-370) inclusion rule, and what the value holds — BIP-371 taproot fields included. Notable quirk: PSBT version 1 does not exist; it was deliberately skipped. Every row is spec-verified — including the MuSig2 (BIP-373), silent-payments (BIP-375/376, Draft), proof-of-reserves (BIP-127), BIP-322 message and BIP-353 DNSSEC fields, transcribed from their raw BIP texts.

The v0-vs-v2 rule that trips people up most: in v2 the global unsigned transaction (0x00) goes away — replaced by explicit fields (previous txid, output index, amounts, scripts) that make incremental construction possible. A PSBT reader must check PSBT_GLOBAL_VERSION first. Free CSV/JSON under CC BY 4.0; registry as of 2026-07-26.

Download CSV Download JSON REST API →

Global map 12

Key typeHexVersionsValueBIP
PSBT_GLOBAL_UNSIGNED_TX0x00v0 (required; MUST be excluded in v2)The transaction in (pre-segwit) network serialization with empty scriptSigs and witnesses.174
PSBT_GLOBAL_XPUB0x01bothKeydata is a 78-byte BIP-32 xpub; value is the 4-byte master fingerprint plus the 32-bit LE derivation path indexes for keys used in this transaction.174
PSBT_GLOBAL_TX_VERSION0x02v2 (required; excluded in v0)32-bit LE signed integer: version number of the transaction being created (not the PSBT version).370
PSBT_GLOBAL_FALLBACK_LOCKTIME0x03v2 only (excluded in v0)32-bit LE unsigned locktime to use if no input specifies a required locktime.370
PSBT_GLOBAL_INPUT_COUNT0x04v2 (required; excluded in v0)Compact size uint: number of inputs in this PSBT.370
PSBT_GLOBAL_OUTPUT_COUNT0x05v2 (required; excluded in v0)Compact size uint: number of outputs in this PSBT.370
PSBT_GLOBAL_TX_MODIFIABLE0x06v2 only (excluded in v0)8-bit bitfield: bit 0 = inputs modifiable, bit 1 = outputs modifiable, bit 2 = has SIGHASH_SINGLE signature whose input/output pairing must be preserved.370
PSBT_GLOBAL_SP_ECDH_SHARE0x07v2 only (excluded in v0)Keydata is the 33-byte scan key; value is a 33-byte ECDH share computed as a*B_scan, where a is the sum of all private keys of all eligible inputs and B_scan is the recipient's scan key.375
PSBT_GLOBAL_SP_DLEQ0x08v2 only (excluded in v0)Keydata is the 33-byte scan key the proof covers; value is a 64-byte BIP-374 DLEQ proof computed for the matching ECDH share.375
PSBT_GLOBAL_GENERIC_SIGNED_MESSAGE0x09bothNo keydata; value is the UTF-8 encoded message to be signed — coordinates BIP-322 multisig message signing through PSBT.322
PSBT_GLOBAL_VERSION0xFBboth (required and set to 2 in v2; 0 if omitted — version 1 was deliberately skipped)32-bit LE unsigned PSBT version number.174
PSBT_GLOBAL_PROPRIETARY0xFCbothKeydata: compact-size identifier length, identifier, compact-size subtype, subkeydata; value: any data defined by the proprietary user.174

Per-input map 33

Key typeHexVersionsValueBIP
PSBT_IN_NON_WITNESS_UTXO0x00bothFull previous transaction in network serialization; should be present for non-segwit spends, may coexist with WITNESS_UTXO.174
PSBT_IN_WITNESS_UTXO0x01bothThe spent transaction output (64-bit LE amount + scriptPubKey) for segwit spends, including P2SH-embedded ones.174
PSBT_IN_PARTIAL_SIG0x02bothKeydata is the pubkey; value is a valid ECDSA signature as it would be pushed to the stack.174
PSBT_IN_SIGHASH_TYPE0x03both32-bit LE uint sighash type this input's signatures must use; finalizers must reject mismatching signatures.174
PSBT_IN_REDEEM_SCRIPT0x04bothThe redeemScript for this input if it has one.174
PSBT_IN_WITNESS_SCRIPT0x05bothThe witnessScript for this input if it has one.174
PSBT_IN_BIP32_DERIVATION0x06bothKeydata is a pubkey needed to sign this input; value is master fingerprint + 32-bit LE path indexes.174
PSBT_IN_FINAL_SCRIPTSIG0x07bothFully constructed scriptSig with signatures and scripts needed for validation.174
PSBT_IN_FINAL_SCRIPTWITNESS0x08bothFully constructed scriptWitness with signatures and scripts needed for validation.174
PSBT_IN_POR_COMMITMENT0x09v0-era (BIP-174 input map; no v2 rule stated)Value is the UTF-8 proof-of-reserves commitment message. Wallets MUST check the prevout txid equals the SHA-256 of the prefixed commitment message, assume input value 0, and SHOULD display the message before signing.127
PSBT_IN_RIPEMD1600x0abothKeydata is the 20-byte hash; value is the preimage hashing to it under RIPEMD160.174
PSBT_IN_SHA2560x0bbothKeydata is the 32-byte hash; value is the preimage hashing to it under SHA256.174
PSBT_IN_HASH1600x0cbothKeydata is the 20-byte hash; value is the preimage under SHA256 then RIPEMD160.174
PSBT_IN_HASH2560x0dbothKeydata is the 32-byte hash; value is the preimage under double-SHA256.174
PSBT_IN_PREVIOUS_TXID0x0ev2 (required; excluded in v0)32-byte txid (standard byte order, not display order) of the transaction whose output is being spent.370
PSBT_IN_OUTPUT_INDEX0x0fv2 (required; excluded in v0)32-bit LE index of the output being spent in the PSBT_IN_PREVIOUS_TXID transaction.370
PSBT_IN_SEQUENCE0x10v2 only (excluded in v0)32-bit LE sequence number; assumed final (0xffffffff) if omitted.370
PSBT_IN_REQUIRED_TIME_LOCKTIME0x11v2 only (excluded in v0)32-bit LE uint >= 500000000: minimum Unix timestamp this input requires as the transaction locktime.370
PSBT_IN_REQUIRED_HEIGHT_LOCKTIME0x12v2 only (excluded in v0)32-bit LE uint > 0 and < 500000000: minimum block height this input requires as the transaction locktime.370
PSBT_IN_TAP_KEY_SIG0x13both64 or 65 byte Schnorr signature for key-path spending a taproot output (no keydata).371
PSBT_IN_TAP_SCRIPT_SIG0x14bothKeydata is x-only pubkey + 32-byte leaf hash; value is the 64/65-byte Schnorr signature for that pubkey-and-leaf combination.371
PSBT_IN_TAP_LEAF_SCRIPT0x15bothKeydata is the BIP-341 control block (merkle path); value is the leaf script followed by its single-byte leaf version.371
PSBT_IN_TAP_BIP32_DERIVATION0x16bothKeydata is a 32-byte x-only pubkey; value is a compact-size count of leaf hashes, the leaf hashes, then fingerprint + 32-bit LE path (internal key uses count 0).371
PSBT_IN_TAP_INTERNAL_KEY0x17bothThe x-only pubkey used as the taproot internal key of the spent output.371
PSBT_IN_TAP_MERKLE_ROOT0x18bothThe 32-byte taproot merkle root hash.371
PSBT_IN_MUSIG2_PARTICIPANT_PUBKEYS0x1abothKeydata is the 33-byte compressed MuSig2 aggregate public key from KeyAgg; value is the list of participants' compressed public keys in the order required for aggregation (sorted order if sorting was done).373
PSBT_IN_MUSIG2_PUB_NONCE0x1bbothKeydata is the participant's 33-byte compressed pubkey + the 33-byte aggregate pubkey + the BIP-341 tapleaf hash of the leaf script to sign (omitted for the internal/output key); value is the 66-byte public nonce from NonceGen.373
PSBT_IN_MUSIG2_PARTIAL_SIG0x1cbothKeydata is the participant's 33-byte compressed pubkey + the 33-byte aggregate pubkey + the BIP-341 tapleaf hash signed (omitted for the internal/output key); value is the 32-byte partial signature from the Sign algorithm.373
PSBT_IN_SP_ECDH_SHARE0x1dv2 only (excluded in v0)Keydata is the 33-byte scan key; value is a 33-byte ECDH share computed as a*B_scan from this input's prevout private key.375
PSBT_IN_SP_DLEQ0x1ev2 only (excluded in v0)Keydata is the 33-byte scan key the proof covers; value is a 64-byte BIP-374 DLEQ proof for the matching input ECDH share.375
PSBT_IN_SP_SPEND_BIP32_DERIVATION0x1fv2 only (excluded in v0)Keydata is the 33-byte spend public key; value is the 4-byte master fingerprint plus the spend key's 32-bit LE derivation path. Updaters SHOULD add it when spending a silent-payment output; Finalizers remove it after the final scriptwitness.376
PSBT_IN_SP_TWEAK0x20v2 only (excluded in v0)No keydata; value is the 32-byte BIP-352 spending tweak (shared-secret hash, optionally plus the label hash). The Updater MUST add it when an input spends a silent-payment output; Finalizers remove it after the final scriptwitness.376
PSBT_IN_PROPRIETARY0xFCbothProprietary use: identifier + subtype keydata, arbitrary value data.174

Per-output map 13

Key typeHexVersionsValueBIP
PSBT_OUT_REDEEM_SCRIPT0x00bothThe redeemScript for this output if it has one.174
PSBT_OUT_WITNESS_SCRIPT0x01bothThe witnessScript for this output if it has one.174
PSBT_OUT_BIP32_DERIVATION0x02bothKeydata is a pubkey needed to spend this output; value is master fingerprint + 32-bit LE path indexes.174
PSBT_OUT_AMOUNT0x03v2 (required; excluded in v0)64-bit signed LE integer: the output amount in satoshis.370
PSBT_OUT_SCRIPT0x04v2 (required; excluded in v0)The output script (scriptPubKey).370
PSBT_OUT_TAP_INTERNAL_KEY0x05bothThe x-only pubkey used as the taproot internal key of this output.371
PSBT_OUT_TAP_TREE0x06bothTuples of (8-bit depth, 8-bit leaf version, compact-size script length, script) in depth-first order, reconstructing the whole taproot tree.371
PSBT_OUT_TAP_BIP32_DERIVATION0x07bothKeydata is a 32-byte x-only pubkey involved in this output; value is leaf-hash count, leaf hashes, then fingerprint + 32-bit LE path.371
PSBT_OUT_MUSIG2_PARTICIPANT_PUBKEYS0x08bothKeydata is the 33-byte compressed MuSig2 aggregate public key from KeyAgg; value is the list of participants' compressed public keys in the order required for aggregation (sorted order if sorting was done).373
PSBT_OUT_SP_V0_INFO0x09v2 only (excluded in v0)No keydata; value is a zero version byte, then the 33-byte scan key, then the 33-byte spend key of the silent-payment address. If PSBT_OUT_SCRIPT is absent this field must be present — it represents the address whose script is not yet computed.375
PSBT_OUT_SP_V0_LABEL0x0av2 only (excluded in v0)No keydata; value is a 32-bit LE unsigned label used to compute the spend key of the silent-payment address to verify change.375
PSBT_OUT_DNSSEC_PROOF0x35bothNo keydata; value is a 1-byte-length-prefixed BIP-353 human-readable name (without the bitcoin prefix symbol) followed by an RFC 9102 DNSSEC AuthenticationChain proving the BIP-353 DNS TXT record.353
PSBT_OUT_PROPRIETARY0xFCbothProprietary use: identifier + subtype keydata, arbitrary value data.174

Source: the raw texts of BIP-174 (Deployed), BIP-370 (Deployed) and BIP-371 (Deployed) + the official type registry (bitcoin/bips, fetched 2026-07-26). Pairs with the output descriptors reference and the wallet recovery matrix.