# Send a descriptor from Coldcard Mk4 or Q over NFC


**Draft, not yet verified on hardware.**

A Coldcard Mk4 or Q sends a wallet descriptor to the SH II over NFC with no phone in between: tap it on the machine at "Backup Wallet" and "Engrave Descriptor" opens. Written for stock firmware v1.4.3, Coldcard Mk4 5.6.3 and Q 1.5.3Q.

<p class="alert alert-warning" id="seed">A Coldcard can push seed words over NFC and the machine accepts them, so type seeds on the machine instead, as in <a href="/doc/manual/seed-entry">Enter a seed on the touchscreen</a>. A descriptor is not a secret, but it reveals every address of the wallet.</p>

## What you need {#requirements}

- The SH II on stock firmware v1.4.3, showing "Backup Wallet" ([the only screen that listens](/doc/manual/nfc-tools-transfer#hold)) with "Firmware: v1.4.3" at the bottom right.
- A Coldcard Mk4, out of its bumper sleeve, or a Q, with NFC on (off by default): **Settings** > **Hardware On/Off** > **NFC Sharing** > **Enable NFC**.

## Choose the export {#exports}

| Coldcard export | Result | Machine shows |
| --- | --- | --- |
| **Advanced/Tools** > **Export Wallet** > **Descriptor**, **OK** for `<0;1>` | Parses. Use it for single-sig | "Engrave Descriptor": "Singlesig", the script, no "Title" |
| **Settings** > **Multisig Wallets** > the wallet > **Coldcard Export**, P2WSH, cosigners on one path | Parses with a title. Plate without child path, which a Coldcard refuses on import ([phone route](#phone)) | "Engrave Descriptor": "Title" with the wallet name, "2-of-3 multisig", "Segwit (P2WSH)" |
| **Multisig Wallets** > the wallet > **Descriptors** > **Export** | Parses [through a phone](#phone) only | "Engrave Descriptor": M-of-N, "Segwit (P2WSH)", "Nested Segwit (P2SH-P2WSH)" or "Legacy (P2SH)", no "Title" |
| **Export Wallet** > **Key Expression** > **Segwit P2WPKH**, **Classic P2PKH** or **P2SH-Segwit** | Wrong plate: no child path | "Engrave Descriptor": "Singlesig", the script |
| **Export Wallet** > **Export XPUB**, any item | Wrong wallet ([bare keys](/doc/manual/capability-sheet#formats)) | `xpub`: "Legacy (P2PKH)"; `zpub`: "Segwit (P2WPKH)"; both without fingerprint or path |
| **Coldcard Export** of a legacy P2SH wallet | Firmware stops at the checkmark (unverified) | "Engrave Descriptor": "Script" "Unknown" |
| **Descriptors** > **Export** tapped directly; **Descriptor** with (1); **Export XPUB** as `ypub`; **Key Expression** > **Multi P2WSH** or **Multi P2SH-P2WSH**; **Bitcoin Core**; **Dump Summary**; **Descriptors** > **View Descriptor** then (1); **Descriptors** > **Bitcoin Core**; **Coldcard Export** of a P2SH-P2WSH wallet or of cosigners on different paths | Fails | "Unknown format" |
| JSON: **Sparrow**, **Cove**, **Nunchuk**, **Fully Noded**, **Theya**, **Bitcoin Safe**, **Generic JSON**, **Blue Wallet**, **Electrum Wallet**, **Wasabi Wallet**, **Unchained**, **Multisig Wallets** > **Export XPUB** | Fails. The machine skips JSON records | Nothing |

## Send a single-sig descriptor {#single}

- On the Coldcard, open **Advanced/Tools** > **Export Wallet** > **Descriptor**.
- Press **OK** (**ENTER** on the Q) for "(<0;1> notation)". Never press (1).
- Choose **Segwit P2WPKH**, **P2SH-Segwit** or **Classic P2PKH**. "Script" will read "Segwit (P2WPKH)", "Nested Segwit (P2SH-P2WPKH)" or "Legacy (P2PKH)".
- Press **(3)** at "press (3) to share via NFC", or the NFC key on the Q.
- Hold the Coldcard over the panel right of the SH II display ([where](#hold)) until the machine changes screen.

![Coldcard Mk4 export prompt for the descriptor, offering (3) to share via NFC](/static/img/descriptor-coldcard-01.webp)
<!-- capture: Coldcard Mk4 screen, firmware 5.6.3, Demo A (lab/TESTWALLET.md) loaded as a Temporary Seed, Advanced/Tools > Export Wallet > Descriptor > OK > Segwit P2WPKH, export prompt with "press (3) to share via NFC"; no lab shot yet (no lab/coldcard/) -->
![Coldcard Q export prompt for the descriptor, naming the NFC key](/static/img/descriptor-coldcard-02.webp)
<!-- capture: Coldcard Q screen, firmware 1.5.3Q, Demo A (lab/TESTWALLET.md) loaded as a Temporary Seed, Advanced/Tools > Export Wallet > Descriptor > ENTER > Segwit P2WPKH, export prompt naming the NFC key; no lab shot yet (no lab/coldcard/) -->

## Send a multisig with its name {#multisig}

- On the Coldcard, open **Settings** > **Multisig Wallets** and pick the wallet, for example **2/3: Demo 2of3**, then **Coldcard Export**.
- Press **(3)**, or the NFC key on the Q.
- Hold the Coldcard over the panel right of the SH II display.

## Through a phone {#phone}

Use this route for **Descriptors** > **Export**, when the direct tap fails, or for a plate that must restore into a Coldcard, which refuses the **Coldcard Export** plate with "Invalid subderivation path - only 0/* or <0;1>/* allowed" (other wallets unverified). The plate holds the receive path `/0/*` only ([what that changes](/doc/manual/multisig-and-fit#differences)). A single-sig **Descriptor** export takes the same route with nothing to delete.

- On the Coldcard, open **Settings** > **Multisig Wallets** > the wallet > **Descriptors** > **Export**.
- SD card: press **(1)**, open `desc-<wallet>.txt` (for example `desc-Demo_2of3.txt`) on the phone through a microSD card reader, and copy its one line.
- Or NFC: press **(3)**, or the NFC key on the Q, read the Coldcard with a phone NFC reader app, and copy the text.
- Delete the two line breaks at the end of the text. Change nothing else.
- Write it to the SH II as in [Send a descriptor with NFC Tools](/doc/manual/nfc-tools-transfer).

## Where to hold the Coldcard {#hold}

- Mk4: lay the keypad face down, the **8** key over the panel right of the SH II display. The antenna is a loop under that key.
- Q: lay it display side down over the same panel. The antenna sits behind the display.

![A Coldcard Mk4 held keypad down over the panel right of the SH II display](/static/img/descriptor-coldcard-03.webp)
<!-- capture: photo, Coldcard Mk4 without sleeve, keypad face down, 8 key over the panel right of the SH II display, machine on "Backup Wallet"; no lab shot yet -->
![A Coldcard Q held display side down over the panel right of the SH II display](/static/img/descriptor-coldcard-04.webp)
<!-- capture: photo, Coldcard Q display side down over the panel right of the SH II display, machine on "Backup Wallet"; no lab shot yet -->

## What the machine shows {#machine}

- "Scanning..." for about one second, then "Engrave Descriptor" with "Title" (after **Coldcard Export** only; shown, not engraved), "Type" and "Script" as in [the table](#exports).
- If Type or Script does not match the wallet, or "Script" reads "Unknown", tap back (top of the right edge). Never the checkmark.

![Engrave Descriptor for the Demo A single-sig descriptor: Type Singlesig, Script Segwit (P2WPKH)](/static/img/descriptor-coldcard-05.webp)
<!-- capture: II screen, "Engrave Descriptor" after NFC payload wpkh([73c5da0a/84h/0h/0h]xpub6CatWdiZ.../<0;1>/*)#qf45pmyh (Demo A m/84' key from lab/TESTWALLET.md, as the Coldcard writes it, no final newline): "Type" "Singlesig", "Script" "Segwit (P2WPKH)", no Title; Go capture per research/device-screen-map.md 4.2 row 28 with this payload -->
![Engrave Descriptor for the demo 2-of-3 Coldcard Export: Title Demo 2of3, Type 2-of-3 multisig, Script Segwit (P2WSH)](/static/img/descriptor-coldcard-06.webp)
<!-- capture: II screen, "Engrave Descriptor" after NFC payload rebuilt as Coldcard 5.6.3 writes it (research/hardware-signers.md 1.5 Coldcard Export row): "# Coldcard Multisig setup file (exported from 73C5DA0A)", "#", "Name: Demo 2of3", "Policy: 2 of 3", "Format: P2WSH", blank line, "Derivation: m/48h/0h/0h/2h", blank line, the three key lines of lab/fixtures/2of3-coldcard.txt, final newline (the fixture itself differs in header, apostrophes and line order; shcheck gives both the same screen and fit): "Title" "Demo 2of3", "Type" "2-of-3 multisig", "Script" "Segwit (P2WSH)"; Go capture per research/device-screen-map.md 4.2 row 27 with this payload -->
- Tap the checkmark (bottom of the right edge). "Engrave" lists "TEXT + QR", "TEXT ONLY" and "QR ONLY" for a single-sig descriptor, whose plate matches the export character for character, and "TEXT ONLY" and "QR ONLY" for the demo 2-of-3 ([fit](/doc/manual/multisig-and-fit#fit), [plate spelling](/doc/manual/multisig-and-fit#differences)).

## If it does not work {#troubleshooting}

| Symptom | Cause | Fix |
| --- | --- | --- |
| Nothing happens on the SH II | Not on "Backup Wallet", NFC off in the Coldcard, the Coldcard off the panel, or a JSON export | Return to "Backup Wallet", enable NFC, [move the Coldcard](#hold), send an export from [the table](#exports) |
| "Unknown format" flashes | An export the machine does not read, most often **Descriptors** > **Export** tapped directly | Send an export that parses ([table](#exports)). Other causes: [Troubleshooting](/doc/manual/troubleshooting#nfc) |
| "Scan error" flashes | The transfer broke off. The Mk4 antenna is weak | Remove the Mk4 sleeve, hold flat and still, send again. Update the Coldcard firmware. Else go [through a phone](#phone) |
| "Legacy (P2PKH)" for a segwit wallet | **Export XPUB** sent | Tap back. Send **Export Wallet** > **Descriptor** |
| "Script" "Unknown", or the SH II stops responding after the checkmark | **Coldcard Export** of a legacy P2SH wallet: its file has no `Format:` line | Tap back, never the checkmark. If it stopped, disconnect the power and reconnect it. Send the wallet [through a phone](#phone) |

<!--
bench-checks:
  - [ ] Direct tap, Coldcard Q and Mk4 (reader mode, SYNTHESIS F12; the body now states the tap as fact, as descriptor-mobile-wallets does): Export Wallet > Descriptor > OK (<0;1>) > Segwit P2WPKH over NFC into v1.4.3: "Engrave Descriptor", "Singlesig", "Segwit (P2WPKH)", no Title; then P2SH-Segwit and Classic P2PKH. Record every Coldcard prompt between "Descriptor" and the export prompt, the prompt wording, the Q's NFC key label, what the Coldcard shows after the read, and the Coldcard firmware version used
  - [ ] Export prompt contents per export: Virtual Disk (2) when enabled; Mk4 QR choice hidden for 321 characters or more (multisig Coldcard Export, about 500 bytes); Q BBQr for Coldcard Export; Export XPUB offering QR or NFC only, no SD file (research/hardware-signers.md 1.1, 1.4, 1.5)
  - [ ] Coldcard multisig file pushed over NFC (Demo 2of3 imported from lab/fixtures/2of3-coldcard.txt): record type (expect Text), "2-of-3 multisig", "Segwit (P2WSH)", Title "Demo 2of3" on "Engrave Descriptor" and absent from the engraved plate (SYNTHESIS F11; the body states "shown, not engraved" from source, REVIEW-wave2 2.1); wallet listed as "2/3: Demo 2of3"; plate text ends at the xpubs with no child path
  - [ ] Mixed Derivation headers rejected: wallet from lab/check/testdata/coldcard-2paths.txt, "Coldcard Export" over NFC gives "Unknown format" (host run agrees); P2SH-P2WSH "Coldcard Export": "Unknown format"
  - [ ] Legacy P2SH (BIP-45) "Coldcard Export", no plate, needle parked: source predicts "Engrave Descriptor" first, with Title, "2-of-3 multisig" and "Script" "Unknown" (record it); back returns to "Backup Wallet" with no stop; then send again and tap the checkmark: source predicts the firmware stops (Encode panics "unknown script", hardware-signers M3; fix-stage shcheck run panics at the same call); record freeze or restart and whether a power cycle recovers. If it does not stop, drop "(unverified)" and the stop from #exports and #troubleshooting
  - [ ] Descriptors > Export tapped directly: "Unknown format"; the same text through a phone with both trailing line breaks removed, by SD file and by phone NFC read: parses, plate ends in /0/*; record the SD file name, the card reader used, the phone NFC reader app used, and whether the copy keeps or adds line breaks; NFC Tools error after a write while the machine opens "Engrave Descriptor" (Q14; the statement now lives on nfc-tools-transfer#troubleshooting)
  - [ ] JSON export ("Sparrow") tapped: no message on the machine; Multisig Wallets > Export XPUB tapped: no message; Export Wallet > Export XPUB > Segwit (BIP-84): "Legacy (P2PKH)"; SLIP-132 zpub: "Segwit (P2WPKH)"; ypub: "Unknown format"; Key Expression > Segwit P2WPKH: parses as single-sig, plate without child path; Key Expression > Multi P2WSH: "Unknown format"; Descriptor with (1): "Unknown format"; View Descriptor > (1) and Descriptors > Bitcoin Core: "Unknown format"
  - [ ] Seed sent directly from Coldcard over NFC (Demo A as a Temporary Seed only, never a real seed): menu path and machine behaviour ("Engrave Seed" expected); codex32 test vector sent as NFC text: straight to "Engrave Plate", no way back (research/device-screen-map.md 1.6, SYNTHESIS F19). The page keeps the house rule whatever the result
  - [ ] Mk4 antenna position (8 key over the panel right of the display) with and without sleeve, and whether the Mk4 antenna is weak enough to need the sleeve off (body states it); Q display side down on the same spot; working distance and transfer time per model; does the reader still poll while the screen saver covers "Backup Wallet" (machine side now on nfc-tools-transfer#hold); oldest Coldcard firmware that transfers (the body offers a firmware update as a "Scan error" fix)
  - [ ] Plate and fit: single-sig plate text equals the Coldcard export character for character (host run on Demo A: wpkh([73c5da0a/84h/0h/0h]xpub6CatWdiZ.../<0;1>/*)#qf45pmyh, identical to the input) and offers "TEXT + QR", "TEXT ONLY", "QR ONLY"; Demo 2of3 Coldcard text offers "TEXT ONLY" and "QR ONLY" (lab/check/RESULTS.md)
  - [ ] Coldcard Q import of a plate from "Coldcard Export" (no child path): "Invalid subderivation path - only 0/* or <0;1>/* allowed"; plate from the phone route (/0/*): imports. Restore of a no-child-path plate into Sparrow, Nunchuk, Krux and Passport Prime (REVIEW-wave2 1.5 and 2.9; descriptor-mobile-wallets blocks the same plate form until a restore is verified): the result decides whether "Coldcard Export" stays a recommended route
  - [ ] All capture comments: Coldcard prompt shots (01 Mk4, 02 Q), placement photos (03 Mk4, 04 Q), the two Go captures (05, 06); no lab/coldcard/ exists yet
notes: title drops "(and seed)" from manual-needs: the house rule keeps seeds on the touchscreen, so the page carries one seed sentence, in the top alert, which keeps id="seed" for the old #seed anchor (seed-entry bench note points there); the codex32 share detail (straight to "Engrave Plate", no way back) lives on seed-entry and in the seed bench item. Every Coldcard label is source-derived (Coldcard firmware 5.6.3 / 1.5.3Q, research/hardware-signers.md 1.1 and 1.5); no Coldcard lab exists. The direct tap (reader mode, SYNTHESIS F12) and the Coldcard export results (F6) rest on source and host runs only. "The Mk4 antenna is weak" comes from harvest Q17 (also stated on troubleshooting#nfc). Legacy P2SH Coldcard Export: the screen is drawn before any Encode call, so the reader can still back out; only the checkmark reaches the panic. Capture 06 uses a payload rebuilt in the Coldcard 5.6.3 form, not the fixture bytes. The microSD card reader in #phone is a generic requirement for opening an SD file on a phone, not taken from a note. Edit pass 2026-10-10 (EDIT_BRIEF, REVIEW-wave2): privacy note in the one-sentence form (3.10); machine-side placement and the screen saver linked to nfc-tools-transfer#hold (3.6), the NFC Tools write and its harmless end-of-write error to nfc-tools-transfer (3.2, 3.4), bare-key detail to capability-sheet#formats (3.5), plate spelling and the /0/* receive-only form to multisig-and-fit#differences (3.8, 2.7), generic "Unknown format", "Scan error" and "Too Large" causes to troubleshooting#nfc (3.9; the "Too Large" row and the "No Title line" row were dropped, the second because #machine states it); "What the machine shows" keeps only the Coldcard values (3.3); the Coldcard import accepts /0/* or /<0;1>/* (2.8); the P2SH-P2WSH answer stays the plain descriptor through a phone, no Format: edit (2.6); the no-child-path restore stays open as "unverified" plus bench item (2.9). The Sparrow "Coldcard Multisig" BBQr troubleshooting row and its bench item were dropped: descriptor-desktop-wallets owns them (#sparrow-file), and lab/sparrow closed the host half (README Coldcard Multisig row: "Show..." gives a one-part BBQr, "Export File..." writes `Demo 2of3-coldcard.txt`; run/shcheck.md rows 8 and 9: parses, Title "Demo 2of3", TEXT ONLY and QR ONLY).
sources: research/hardware-signers.md (key findings 1 to 7 and 9; 1.1 NFC toggle, antennas, export prompt, OK/ENTER; 1.2 Text versus MIME records; 1.3 direct push; 1.4 SD and phone routes, file names, QR limits; 1.5 export map, cases C1 to C9 incl. Key Expression C5 C6, M1 to M8, J1 to J4, single-sig and multisig Export XPUB rows; 1.6 routes; 4 Coldcard import refusal; 5 bench checks), research/device-screen-map.md (1.2 start screen and status lines, version text, screen saver; 1.3 C "Engrave Seed" reached by NFC; 1.4 NFC input, reader polling, decode order, routing; 1.5 "Engrave Descriptor" Title/Type/Script and the Script list, "Engrave" / "Choose engraving"; 1.6 codex32 straight to "Engrave Plate", no way back; 2 button positions; 3 what gets engraved, title not engraved; 4.2 rows 27 and 28; 6), firmware source in lab/check/upstream (ea4b65b): nonstandard/parse.go 36-39 and 77-170 (Coldcard text kept only with a Name; no Format line leaves the script unknown), gui/gui.go 1689-1738 and 1785-1799 (routing, descriptorFlow), 2069-2159 (screen drawn, checkmark calls validateDescriptor), 399-400 (Encode), bip380/bip380.go 69-88 (Script.String "Unknown") and 200-215 (panic "unknown script"), research/nfc-tools-transfer.md (4 SeedHammer antenna from the FAQ; 7 Coldcard push), research/desktop-wallets.md (1.1 Sparrow Coldcard Multisig "Show..." BBQr, "Export File..."), research/BRIEF.md (device facts; corrections: titles shown not engraved, Coldcard text needs Name:; phone write error harmless; direct signer tap; bare xpub hazard; supported scripts; titles from JSON label or Coldcard Name), lab/TESTWALLET.md, lab/fixtures/2of3-coldcard.txt, lab/check/RESULTS.md (2of3-coldcard.txt fit and note 1, 2of3-specter.json title, cosigner xpub notes), lab/check/testdata/coldcard-2paths.txt, shcheck runs (firmware ea4b65b) on scratch payloads rebuilt as the Coldcard writes them: Demo A wpkh <0;1> descriptor with checksum (accepted, three layouts), multisig Descriptors > Export with two trailing newlines (Unknown format; trimmed: accepted, /0/*), Key Expression, bare xpub (Legacy (P2PKH)), Coldcard Export with a final newline (accepted, Title "Demo 2of3"), Format: P2SH-P2WSH (Unknown format); fix-stage shcheck runs: Coldcard-form P2WSH 2-of-3 (header from 73C5DA0A, Format before a blank line and Derivation: m/48h/0h/0h/2h; accepted, Title "Demo 2of3", TEXT ONLY and QR ONLY, same as the fixture) and P2SH Coldcard Export without a Format line (parse accepted, then panic "unknown script" in Descriptor.Encode); manuals/nfc-tools-transfer.md (#troubleshooting linked for the write error), multisig-and-fit.md, troubleshooting.md, seed-entry.md, descriptor-desktop-wallets.md (#sparrow-file) (linked, not repeated); lab/sparrow (README.md Coldcard Multisig row, run/shcheck.md rows 8-9), manuals/REVIEW-wave2.md (1.5, 2.1, 2.4 to 2.10, 3.1 to 3.10, 4 stale text); harvest Q17 Q14 Q12 (also Q13), SYNTHESIS D (Coldcard row; scanned unknown format, BBQr Coldcard file), SYNTHESIS F 6 11 12 14 19
-->
