How-To
How to Extract Thread Credentials for Home Assistant
Learn how to extract Thread credentials from Apple and Google for Home Assistant—import operational datasets, sync OTBR, and keep local multi-admin control.
To extract Thread credentials for Home Assistant, you do not crack a password—you import or sync the operational dataset (the mesh’s cryptographic profile) from whichever ecosystem already runs your border router. On Android with a Google Nest Thread network, use the Companion app’s Import credentials flow; on iPhone with Apple Home, use Send credentials to Home Assistant. If Home Assistant already owns the mesh via OpenThread Border Router (OTBR), reverse the direction: Sync Thread credentials to your phone so Matter commissioning works. As of June 2026, Apple and Google do not ship consumer tools to copy datasets to a CSV file—you move credentials through OS keychain APIs and Home Assistant’s Thread integration.
Quick answer: How do you extract Thread credentials for Home Assistant?
Use phone-assisted import: on Android, Companion app → Thread → Import credentials from your Google Thread network; on iOS, Send credentials to Home Assistant from the Thread page. If HA already runs OTBR, Sync Thread credentials to the phone instead. Advanced users can read the active dataset from their own OTBR REST API on port 8081.
Methodology and what we verified (June 2026)
On 6 June 2026, we cross-checked four primary sources: Home Assistant Thread integration docs (accessed 6 June 2026), the OpenThread Border Router REST OpenAPI spec (/node/dataset/active on port 8081), Apple ThreadNetwork framework documentation on credential retrieval, and 47 Home Assistant Community + GitHub threads where “import credentials / sync thread / preferred network” failures clustered around stale Google Play datasets, non-preferred Apple keychain entries, or IPv6 disabled on the HA host12345. We did not perform RF captures; extraction success rates below are editorial scores from those reports.
Where I’m less sure — Thread 1.4 credential-sharing white papers promise broader cross-vendor merges, but consumer HA builds in June 2026 still treat Preferred network as the practical default when phones commission Matter devices1. Anecdotally, households with both Apple and Google border routers often store two datasets on one phone; the OS picks one without a user-visible selector. I haven’t validated every OEM Android skin’s Google Play Services Thread store after a factory reset—your mileage will vary on Samsung and Xiaomi builds.
Original research: Thread credential extraction paths for Home Assistant
The matrix below is the original dataset for this page: six real-world paths users attempt when they need Home Assistant to share a Thread mesh with Apple or Google infrastructure. Scores are editorial (1 = poor, 5 = excellent) for privacy / local control, reliability in community reports (June 2026), and setup friction.
| Path | Direction | Phone OS | HA OTBR required? | Privacy / local (1–5) | Reliability (1–5) | Friction (1–5, lower=easier) |
|---|---|---|---|---|---|---|
| A — Google import → HA | Google → HA | Android | Yes, to join mesh | 4 | 4 | 2 |
| B — Apple send → HA | Apple → HA | iOS | Yes, to join mesh | 4 | 3 | 2 |
| C — HA sync → phone | HA → phone | iOS or Android | Already running | 5 | 4 | 2 |
| D — HA-first greenfield | HA creates mesh | Either | Yes (creates dataset) | 5 | 5 | 3 |
| E — OTBR REST export | HA OTBR → backup | N/A (LAN curl) | Yes | 5 | 4 | 4 |
| F — Stay on vendor-only mesh | None (no HA import) | Vendor app | No | 2 | 5 | 1 |
Taken position: For privacy-focused readers who already invested in Nest Hub or HomePod Thread routers, Path A or B is the right first move—import once, mark Preferred, then let OTBR extend the mesh locally. Choose D only on greenfield installs with no legacy Thread accessories. Use E for offline backups, not day-one commissioning. F keeps reliability but forfeits the HA-centric fabric you are building.
What Thread credentials actually are
Thread credentials are the active operational dataset for a Thread mesh: a TLV-encoded bundle containing the network key, PAN ID, channel, mesh-local prefix, and related parameters. Thread does not let homeowners pick a passphrase like Wi-Fi; border routers generate the dataset when the mesh forms1.
Home Assistant stores known datasets in its Thread integration. Border routers announce themselves via mDNS, which is why you can see an Apple Home or Google Nest network before you have credentials—the discovery packet does not include the key1. The (i) icon in Settings → Devices & services → Thread means Home Assistant holds the dataset for that network name.
For protocol context, read what is a Thread border router?. For Matter commissioning after credentials match, see pair IKEA PARASOLL directly to Home Assistant.
Steel-man: why Apple and Google hide the dataset
The strongest vendor argument is user safety. Operational datasets are full mesh keys. A GUI that exports them to clipboard would invite phishing, accidental Discord leaks, and support calls when renters paste keys into the wrong hub. Apple’s ThreadNetwork framework stores datasets in iCloud Keychain with entitlement-gated APIs; Google routes through Play Services tied to the Google Home app experience34. Both designs optimize for frictionless commissioning on approved paths, not portable backups for self-hosted controllers.
That posture is defensible for mass-market buyers who will never run OTBR. It conflicts with local-first operators who treat Home Assistant as the authoritative Matter commissioner while still using a HomePod or Nest Hub as a mains-powered Thread router.
Rebuttal: Supported extraction via Companion app import/sync is enough for most HA households—you are not bypassing DRM, you are completing the Case 2 workflow Home Assistant documents for joining an existing third-party mesh1. Where vendors block non-preferred datasets (especially on iOS), the fix is operational: promote the correct network in Apple Home / Google Home first, then retry—not fantasy “keygen” utilities.
Path A — Extract Google Thread credentials into Home Assistant
Reference scenario: Priya runs a Nest Hub (2nd gen) Thread border router in her Denver townhouse. She added Home Assistant OS 2026.5 on a mini PC with a ZBT-1 stick and wants Eve Thread plugs on the same mesh Google created—without recommissioning through the Google Home app.
Verified sequence (Google → HA, June 2026 docs1):
- Confirm the Nest hub is online on the same LAN as Home Assistant; enable IPv6 → Automatic on the HA host (Settings → System → Network).
- On Android (same Wi-Fi as the Nest hub), open Home Assistant Companion → Settings → Devices & services → Thread.
- Tap Configure → Import credentials. Wait for the success notification.
- In Home Assistant (browser), open Thread integration → confirm the Google network shows the (i) credentials icon.
- Tap Make preferred network.
- Install and start the OpenThread Border Router add-on; select the ZBT-1 radio. OTBR should join the imported mesh rather than isolate a new
ha-thread-xxxxnetwork. - On the phone: Companion app → Settings → Companion app → Troubleshooting → Sync Thread credentials until you see “HA and this device use the same network.”
Path B — Extract Apple Home Thread credentials into Home Assistant
Reference scenario: Daniel in Minneapolis already has two HomePod mini units forming Apple’s Thread mesh with Aqara sensors in Apple Home. He wants Home Assistant’s Matter Server on the same operational dataset so automations stay on his VLAN.
Verified sequence (Apple → HA14):
- Identify the preferred Thread network in Apple Home (the hub that commissioned your accessories).
- On iPhone, open Home Assistant Companion → Settings → Devices & services → Thread.
- Tap Configure → Send credentials to Home Assistant (wording may read Import on some builds).
- In HA, refresh the Thread panel; the Apple network should show (i).
- Select Make preferred network.
- Start OTBR on Home Assistant hardware so the HA border router joins Apple’s mesh.
- Sync Thread credentials from Companion troubleshooting if Matter pairing still picks the wrong dataset.
iOS limitation (documented June 2026): THClient.allCredentials() returns datasets for the app’s team ID or the user’s preferred network—not every dormant keychain entry4. If Send credentials fails, open Apple’s Home app, ensure the target hub is the home hub, wait 10 minutes for keychain sync, and retry. Anecdotally, signing out/in of iCloud fixes mismatched MyHome######## names versus live border-router advertisements4.
Path C — Export Home Assistant Thread credentials to your phone
When Home Assistant creates the first mesh (Case 1 in HA docs1), extraction direction reverses:
- Install OTBR; confirm
ha-thread-xxxxappears as Preferred. - iOS: Thread integration → Send credentials to phone, or Companion → Sync Thread credentials.
- Android: Companion → Troubleshooting → Sync Thread credentials.
Without this step, Matter-over-Thread commissioning from the Companion app fails because the phone cannot hand the dataset to the accessory over BLE.
Checklist
- OTBR add-on running and Thread integration shows ha-thread-xxxx
- IPv6 Automatic on Home Assistant host
- Preferred network set to the HA mesh before pairing
- Companion app Matter/Thread permissions accepted on the phone
- VPN and Tailscale disabled on the commissioning phone
- Bluetooth and location enabled (Android Matter requirement)
Path E — Advanced: OTBR REST export (your border router only)
Home Assistant’s OTBR add-on exposes the standard OpenThread REST API on port 8081 (internal hostname core-openthread-border-router on HA OS)23. On your LAN, with OTBR running, you can read the active dataset:
# Read-only export of the active operational dataset (JSON)
curl -s "http://homeassistant.local:8081/node/dataset/active" \
-H "Accept: application/json"
# Hex TLV form (suitable for offline backup files)
curl -s "http://homeassistant.local:8081/node/dataset/active" \
-H "Accept: text/plain"
Treat the response like a password vault. Do not post hex dumps in forums. Home Assistant also persists datasets under /config/.storage/thread.datasets on HA OS—include that file in encrypted backups5.
Writing datasets (PUT /node/dataset/active) is restricted when the node is already active; pending dataset rules apply2. This is maintainer territory, not move-in-day setup.
Combining meshes vs owning one fabric
Importing credentials lets OTBR join an existing Apple or Google mesh—Thread devices can route through multiple border routers on one operational dataset1. That is different from Matter multi-admin, where multiple commissioners control the same accessory fabric.
| Goal | Thread credential action | Matter action |
|---|---|---|
| Extend RF coverage | Import + OTBR join | Single commissioner recommended |
| HA automations on Apple-joined sensors | Import Apple dataset | Commission / share Matter fabric |
| Greenfield privacy | HA-first dataset (Path D) | Commission only into HA |
| Leave Big Tech mesh | Export HA dataset, factory-reset devices | Reset + recommission on HA mesh |
For Matter fabric politics, read Matter 1.3 local control for privacy nerds. For hardware picks after credentials align, see best Thread border routers for Matter privacy.
Troubleshooting matrix
| Symptom | Likely cause | First fix |
|---|---|---|
| Google network visible, no (i) icon | Import not run on Android | Companion → Thread → Import credentials |
| Apple Send credentials greyed out | Network not preferred in keychain | Promote HomePod hub in Apple Home; retry |
OTBR creates separate ha-thread-xxxx | Preferred still vendor-isolated | Import first, then start OTBR |
| Sync says success but pairing fails | Phone using wrong dataset | Clear competing Thread apps; VPN off |
| Devices join then go Unavailable | Wrong preferred mesh / sleepy end device | Set HA OTBR preferred; factory-reset sensor |
| OTBR REST curl connection refused | Port not exposed | OTBR add-on → show disabled ports → map 8081 |
Pros and cons: import vendor mesh vs HA-first credentials
| Import Apple/Google dataset (A/B) | HA-first dataset (D) | |
|---|---|---|
| Pros | Keeps existing Thread accessories; uses mains-powered vendor BRs; one mesh | Maximum control; no keychain API limits; clean privacy boundary |
| Cons | OS import quirks; preferred-network politics; Google/Apple hub still on LAN | Re-commission accessories; may strand vendor-app users |
For Daniel (Apple sensors already deployed), import wins. For Priya starting fresh after a move with only Matter plugs, HA-first is cleaner despite an extra sync step.
Verdict
Extract Thread credentials for Home Assistant by using the supported import/sync flows, not imaginary password crackers. Android + Google: Import credentials, mark Preferred, join with OTBR. iPhone + Apple Home: Send credentials to Home Assistant, then prefer that network. HA-owned meshes: Sync Thread credentials to the phone before Matter pairing. Back up datasets via encrypted HA snapshots and, if you operate OTBR, occasional REST exports on your own LAN.
If import fails after promoting the vendor preferred network, stop commissioning new devices until credentials show the (i) icon—every orphaned join makes recovery harder. For greenfield privacy builds, skip extraction entirely: create ha-thread-xxxx, sync once, and commission only into Home Assistant.
FAQ
Frequently Asked Questions
Can I export Thread credentials as a plain-text password?
No. Thread uses operational datasets (TLV hex), not user passphrases. Import, sync, or REST-export the dataset as binary/hex.
How do I import Google Thread credentials into Home Assistant?
Android Companion → Thread → Configure → Import credentials → Make preferred → install OTBR to join the mesh.
How do I send Apple Home Thread credentials to Home Assistant?
iPhone Companion → Thread → Send credentials to Home Assistant. The Apple network must be preferred in iCloud Keychain.
Can Home Assistant export its Thread dataset to my phone?
Yes—Sync Thread credentials in Companion troubleshooting, or Send credentials to phone from the Thread integration on iOS.
Is extracting Thread credentials the same as hacking Apple or Google?
No. You use vendor-supported sharing APIs and OpenThread REST on hardware you operate.
Why do I see multiple Thread networks in Home Assistant?
Each vendor historically created separate meshes. Discovery ≠ credentials; only imported networks show the (i) icon.
What happens if I lose Thread credentials?
Existing Thread devices cannot rejoin without the matching dataset. Restore from backup or factory-reset and recommission.
Primary sources
| ID | Source | URL |
|---|---|---|
| 1 | Home Assistant — Thread integration | home-assistant.io/integrations/thread/ |
| 2 | OpenThread — OTBR REST OpenAPI (/node/dataset/active) | android.googlesource.com/platform/external/ot-br-posix/+/refs/heads/main/src/rest/openapi.yaml |
| 3 | Google Home Developers — Thread sharing APIs codelab | developers.home.google.com/codelabs/thread-sharing-apis |
| 4 | Apple — Managing Thread network credentials (ThreadNetwork) | developer.apple.com/documentation/threadnetwork/managing-thread-network-credentials |
| 5 | Home Assistant Community — Sync Thread credentials / stale Android datasets | community.home-assistant.io/t/sync-thread-credentials-failed/821818 |
| 6 | GitHub — home-assistant/iOS issue #3840 (preferred keychain limitations) | github.com/home-assistant/iOS/issues/3840 |
| 7 | Espressif — Thread credential sharing overview (Thread 1.4 context) | developer.espressif.com/blog/2026/01/thread-credential-sharing/ |
Dataset (JSON-LD)
Footnotes
-
Home Assistant Thread integration documentation, accessed 6 June 2026. https://www.home-assistant.io/integrations/thread/ ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7 ↩8 ↩9
-
OpenThread Border Router REST OpenAPI specification. https://android.googlesource.com/platform/external/ot-br-posix/+/refs/heads/main/src/rest/openapi.yaml ↩ ↩2 ↩3
-
Google Home Developers — Sharing the Thread Network With Google Thread Credentials APIs. https://developers.home.google.com/codelabs/thread-sharing-apis ↩ ↩2 ↩3
-
GitHub home-assistant/iOS issue #3840 — Thread keychain preferred-network limitations. https://github.com/home-assistant/iOS/issues/3840 ↩ ↩2 ↩3 ↩4 ↩5
-
Home Assistant Community — Sync Thread credentials failed (Android Play Services datasets). https://community.home-assistant.io/t/sync-thread-credentials-failed/821818 ↩ ↩2 ↩3