Backup and recovery across the Fireblocks MPC workspace — the workspace backup and the owner’s device key share backup.
Fireblocks uses MPC-CMP in a 3-of-3 setup: two of the three key shares live with Fireblocks, and the third lives on the wallet owner’s device (in its secure enclave). Every vault and address in a workspace is derived from a single workspace master key (a BIP32 HD wallet), so one backup covers the entire workspace.CoinCover sits alongside Fireblocks as the backup and recovery layer. The integration is API-based — CoinCover provides an RSA public key through the Partner API, which is used to encrypt the material that needs protecting. There are two independent backup flows, because there are two distinct risks: Fireblocks itself becoming unavailable, and the owner losing their device.
The encrypted backup package (.zip) and the RSA private key
Owner’s key share backup
The owner losing their device
The encrypted auto-passphrase and the RSA private key
In both flows CoinCover holds only encrypted material and the RSA private key — never a share it can use on its own. The RSA private key is held encrypted at rest and only ever handled in plaintext within our hardware-isolated key vault.
The integration is API-based: CoinCover generates an RSA-4096 key pair through the Partner API, hands the public key to Fireblocks, and holds the private key. The two flows below both reuse that same key pair.
Protects against Fireblocks becoming unavailable. This is a one-time setup at onboarding that covers the whole workspace.
1
CoinCover provides an RSA public key
CoinCover generates an RSA key pair via the Partner API. The public key is sent to Fireblocks; the private key is held by CoinCover, encrypted at rest.
2
Fireblocks encrypts its two cloud key shares
Fireblocks encrypts its two key shares with CoinCover’s RSA public key.
3
The customer encrypts their device share
The workspace owner sets a recovery passphrase — known only to them — which encrypts their device key share.
4
Everything is bundled and stored
All three encrypted shares are bundled into a single .zip and sent to CoinCover for secure storage.
CoinCover holds the backup .zip and the RSA private key, but the device share inside the .zip is encrypted with the customer’s recovery passphrase, which CoinCover never sees. Without that passphrase the third share can’t be decrypted, so CoinCover alone can’t reconstruct the wallet.
Protects against the owner losing or breaking their device. It’s a separate, per-owner flow, triggered when the CoinCover service activates on that owner’s device — but it reuses the workspace RSA public key.
1
The owner enrols
The owner receives an enrolment prompt on their device and confirms it with face verification.
2
The app generates an auto-passphrase
The Fireblocks app generates an auto-passphrase — random, internal, and never shown to the user. It’s distinct from the workspace recovery passphrase.
3
The auto-passphrase is used twice
The auto-passphrase encrypts the device key share (held by Fireblocks), and a copy of the auto-passphrase is itself encrypted with the workspace RSA public key and sent to CoinCover.
Separation of concerns: Fireblocks holds the encrypted device share, CoinCover holds the encrypted auto-passphrase that unlocks it, plus the RSA private key needed to decrypt that passphrase. Neither party can recover the share alone.
The two flows above protect the keys. Vault sync protects the derivation paths — the record of every vault and address in the workspace and how each is derived, which is what’s needed to rebuild the accounts at recovery. It’s a one-time link-up, recommended at onboarding, that keeps CoinCover’s copy of those derivation paths continuously up to date.
1
Link the workspace to CoinCover Control
The customer sets up an API user in CoinCover Control and links their Fireblocks workspace to it. Ideally this is done during onboarding.
2
CoinCover pulls the account data every 24 hours
Using that API access, CoinCover pulls the account’s wallet data on a 24-hour cycle, maintaining a current, complete set of the derivation paths for every vault and address in the workspace.
3
The synced record is ready for recovery
Because Control already holds an up-to-date set of derivation paths, a workspace recovery can return them as a CSV alongside the key material, with no manual export needed.
Vault sync is optional but strongly recommended. Without it, a workspace recovery still returns the keys, but the customer has to export their own vault report from Fireblocks at recovery time or rebuild every account manually. With it in place, the current derivation paths are always ready — so we encourage customers to complete this linkage during onboarding.
There are two recovery flows, matching the two backup flows. Both are initiated in CoinCover Control and gated the same way: release only happens after identity verification and your approval policy are satisfied, with risk flags routed to manual review. When you raise the request you also supply a public GPG key — CoinCover uses it to encrypt the recovery package so it’s protected in transit, and you decrypt it locally with the matching private key.
Workspace recovery — when Fireblocks is unavailable
1
Request recovery through CoinCover Control
Submit a recovery request from the CoinCover Control dashboard.
2
Approval gate
Release is gated by identity verification and your approval policy before any material is released.
3
CoinCover releases the held material
CoinCover returns the backup .zip and the RSA private key. If the workspace is synced, the release also includes the vault sync package — the current derivation paths for every vault — so the customer has everything needed to rebuild all their accounts. The release is encrypted to the GPG public key you supplied, so you first decrypt it with your GPG private key before using the material.
4
Reconstitute with the Fireblocks Recovery Utility
On an air-gapped machine, the customer supplies their recovery passphrase and uses the Fireblocks Recovery Utility to decrypt the shares, reconstitute the workspace key, and move assets to a new wallet provider. The derivation data needed to rebuild every vault comes back as a CSV alongside the key material — from the synced record in Control if vault sync is set up, or from the customer’s own exported vault report if it isn’t.
The recovery passphrase set at onboarding is always the customer’s to hold — CoinCover never sees it, so it must be stored safely ahead of time.
End result
Assets across every vault and address in the workspace are recovered in a single operation, because all derivations come from the one master key inside the .zip.
Owner device recovery — when the owner lost their device
1
Put the account into recovery mode
The Fireblocks account is placed into recovery mode on the Fireblocks side.
2
Request recovery through CoinCover Control
The owner requests recovery via CoinCover Control. The same approval gate applies before anything is released.
3
CoinCover decrypts and releases the auto-passphrase
CoinCover decrypts the stored auto-passphrase with the RSA private key and returns it to the customer, encrypted to the GPG public key they supplied. The customer decrypts it with their GPG private key to obtain the plaintext auto-passphrase.
4
Restore to a fresh device
On a new device, the owner enters the auto-passphrase. The Fireblocks app pulls the encrypted share from Fireblocks servers, decrypts it, and restores it to the new device’s secure enclave.
Backup and recovery across the BitGo self-custody wallet.
Partners overview
All CoinCover partner integrations.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Coincover Developer Docs","colors":{"primary":"#3939EF","light":"#B59BFD","dark":"#B59BFD"},"logo":{"light":"https://mintcdn.com/coincover/YulmKC25AtRiJdum/images/CC-Logo-Black.svg?fit=max\u0026auto=format\u0026n=YulmKC25AtRiJdum\u0026q=85\u0026s=d81d260390cff9797e850679aeec6841","dark":"https://mintcdn.com/coincover/YulmKC25AtRiJdum/images/CC-Logo-White.svg?fit=max\u0026auto=format\u0026n=YulmKC25AtRiJdum\u0026q=85\u0026s=e4baa96369293d28a43a8fee6c4db806","href":"https://www.coincover.com/"},"favicon":"https://mintcdn.com/coincover/YulmKC25AtRiJdum/images/Favicon32px.svg?fit=max\u0026auto=format\u0026n=YulmKC25AtRiJdum\u0026q=85\u0026s=a1f83bee4378390aeb0dd8059e55456b","appearance":{"strict":false},"background":{"color":{"light":"#FFFFFF","dark":"#0E171B"}},"navbar":{"links":[],"primary":{"type":"button","label":"Talk to us","href":"https://www.coincover.com/contact"}},"footer":{"socials":{"linkedin":"https://www.linkedin.com/company/coincoverglobal","x":"https://x.com/Coincoverglobal","website":"https://www.coincover.com"}},"fonts":{"family":"Inter","weight":400},"errors":{"404":{"redirect":true}},"contextual":{"options":["copy","view","claude","cursor"],"display":"header"},"metadata":{"timestamp":false},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"coincover","hasAudioNarration":false,"actualSubdomain":"coincover","customDomains":["developer.coincover.com"],"gitSource":{"type":"github","owner":"coincover","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"entitlements":{},"buildId":"6aeda83b61234cac2656d83a","clientVersion":"0.0.4088","searchFilterCounts":[{"language":"default","tag":"API Reference","count":30},{"language":"default","tag":"Products","count":13},{"language":"default","tag":"Guides","count":10},{"language":"default","tag":"Using CoinCover Control","count":9},{"language":"default","tag":"Partners","count":8},{"language":"default","tag":"Backups","count":7},{"language":"default","tag":"Recover for Institutions","count":6},{"language":"default","tag":"Retail API","count":6},{"language":"default","tag":"Keys","count":5},{"language":"default","tag":"Institutional API","count":5}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":"@keyframes cc-marquee{from{transform:translateX(0)}to{transform:translateX(-50%)}}.cc-marquee{animation:cc-marquee var(--cc-duration, 10s) linear infinite}.cc-marquee-fade{pointer-events:none;position:absolute;top:0;bottom:0;z-index:10;width:5rem}.cc-marquee-fade-left{left:0;background:linear-gradient(to right, #ffffff, transparent)}.cc-marquee-fade-right{right:0;background:linear-gradient(to left, #ffffff, transparent)}html.dark .cc-marquee-fade-left{background:linear-gradient(to right, #0e171b, transparent)}html.dark .cc-marquee-fade-right{background:linear-gradient(to left, #0e171b, transparent)}html{overflow-x:hidden}.cc-hero{max-width:90rem}.cc-hero-bg{pointer-events:none;position:absolute;top:-12rem;right:-12rem;z-index:0;width:44rem}@media (max-width: 1023px){.cc-hero-bg{display:none}}.cc-hero-bg img{display:block;width:100%;height:auto;opacity:0.4;mix-blend-mode:screen}html.dark .cc-hero-bg img{opacity:0.55}.cc-hero-content{position:relative;z-index:1}.cc-cta{background-color:transparent}html.dark .cc-partner-logo{filter:invert(1) hue-rotate(180deg)}"}],"page":{"pagePath":"partner-guides/fireblocks","slug":"/partner-guides/fireblocks","pageMetadata":{"title":"Fireblocks","sidebarTitle":"Fireblocks","description":"Backup and recovery across the Fireblocks MPC workspace — the workspace backup and the owner's device key share backup.","icon":"layer-group","href":"/partner-guides/fireblocks"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Backup and recovery across the Fireblocks MPC workspace — the workspace backup and the owner’s device key share backup.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={code:`code`,p:`p`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,..._provideComponents(),...props.components},{Card,CardGroup,Heading,Note,Step,Steps,Table}=_components;if(!Card)_missingMdxReference(`Card`,true);if(!CardGroup)_missingMdxReference(`CardGroup`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Note)_missingMdxReference(`Note`,true);if(!Step)_missingMdxReference(`Step`,true);if(!Steps)_missingMdxReference(`Steps`,true);if(!Table)_missingMdxReference(`Table`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`Fireblocks uses `,_jsx(_components.strong,{children:`MPC-CMP in a 3-of-3 setup`}),`: two of the three key shares live with Fireblocks, and the third lives on the wallet owner’s device (in its secure enclave). Every vault and address in a workspace is derived from a single workspace master key (a BIP32 HD wallet), so `,_jsx(_components.strong,{children:`one backup covers the entire workspace`}),`.`]}),`\n`,_jsxs(_components.p,{children:[`CoinCover sits alongside Fireblocks as the backup and recovery layer. The integration is `,_jsx(_components.strong,{children:`API-based`}),` — CoinCover provides an RSA public key through the Partner API, which is used to encrypt the material that needs protecting. There are `,_jsx(_components.strong,{children:`two independent backup flows`}),`, because there are two distinct risks: Fireblocks itself becoming unavailable, and the owner losing their device.`]}),`\n`,_jsx(Heading,{level:`2`,id:`at-a-glance`,children:`At a glance`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Backup flow`}),_jsx(_components.th,{children:`Protects against`}),_jsx(_components.th,{children:`What CoinCover holds`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Workspace backup`}),_jsx(_components.td,{children:`Fireblocks becoming unavailable`}),_jsxs(_components.td,{children:[`The encrypted backup package (`,_jsx(_components.code,{children:`.zip`}),`) and the RSA private key`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Owner’s key share backup`}),_jsx(_components.td,{children:`The owner losing their device`}),_jsx(_components.td,{children:`The encrypted auto-passphrase and the RSA private key`})]})]})]}),`\n`,_jsx(_components.p,{children:`In both flows CoinCover holds only encrypted material and the RSA private key — never a share it can use on its own. The RSA private key is held encrypted at rest and only ever handled in plaintext within our hardware-isolated key vault.`}),`\n`,_jsx(Heading,{level:`2`,id:`backup`,children:`Backup`}),`\n`,_jsx(_components.p,{children:`The integration is API-based: CoinCover generates an RSA-4096 key pair through the Partner API, hands the public key to Fireblocks, and holds the private key. The two flows below both reuse that same key pair.`}),`\n`,_jsx(Heading,{level:`3`,id:`workspace-backup`,children:`Workspace backup`}),`\n`,_jsx(_components.p,{children:`Protects against Fireblocks becoming unavailable. This is a one-time setup at onboarding that covers the whole workspace.`}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`CoinCover provides an RSA public key`,children:_jsx(_components.p,{children:`CoinCover generates an RSA key pair via the Partner API. The public key is sent to Fireblocks; the private key is held by CoinCover, encrypted at rest.`})}),_jsx(Step,{title:`Fireblocks encrypts its two cloud key shares`,children:_jsx(_components.p,{children:`Fireblocks encrypts its two key shares with CoinCover’s RSA public key.`})}),_jsx(Step,{title:`The customer encrypts their device share`,children:_jsxs(_components.p,{children:[`The workspace owner sets a `,_jsx(_components.strong,{children:`recovery passphrase`}),` — known only to them — which encrypts their device key share.`]})}),_jsx(Step,{title:`Everything is bundled and stored`,children:_jsxs(_components.p,{children:[`All three encrypted shares are bundled into a single `,_jsx(_components.code,{children:`.zip`}),` and sent to CoinCover for secure storage.`]})})]}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[`CoinCover holds the backup `,_jsx(_components.code,{children:`.zip`}),` and the RSA private key, but the device share inside the `,_jsx(_components.code,{children:`.zip`}),` is encrypted with the customer’s recovery passphrase, which CoinCover never sees. Without that passphrase the third share can’t be decrypted, so CoinCover alone can’t reconstruct the wallet.`]})}),`\n`,_jsx(Heading,{level:`3`,id:`owner’s-key-share-device-backup`,children:`Owner’s key share (device) backup`}),`\n`,_jsx(_components.p,{children:`Protects against the owner losing or breaking their device. It’s a separate, per-owner flow, triggered when the CoinCover service activates on that owner’s device — but it reuses the workspace RSA public key.`}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`The owner enrols`,children:_jsx(_components.p,{children:`The owner receives an enrolment prompt on their device and confirms it with face verification.`})}),_jsx(Step,{title:`The app generates an auto-passphrase`,children:_jsxs(_components.p,{children:[`The Fireblocks app generates an `,_jsx(_components.strong,{children:`auto-passphrase`}),` — random, internal, and never shown to the user. It’s distinct from the workspace recovery passphrase.`]})}),_jsx(Step,{title:`The auto-passphrase is used twice`,children:_jsxs(_components.p,{children:[`The auto-passphrase encrypts the device key share (held by `,_jsx(_components.strong,{children:`Fireblocks`}),`), and a copy of the auto-passphrase is itself encrypted with the workspace RSA public key and sent to `,_jsx(_components.strong,{children:`CoinCover`}),`.`]})})]}),`\n`,_jsx(Note,{children:_jsx(_components.p,{children:`Separation of concerns: Fireblocks holds the encrypted device share, CoinCover holds the encrypted auto-passphrase that unlocks it, plus the RSA private key needed to decrypt that passphrase. Neither party can recover the share alone.`})}),`\n`,_jsx(Heading,{level:`3`,id:`vault-sync`,children:`Vault sync`}),`\n`,_jsxs(_components.p,{children:[`The two flows above protect the `,_jsx(_components.strong,{children:`keys`}),`. Vault sync protects the `,_jsx(_components.strong,{children:`derivation paths`}),` — the record of every vault and address in the workspace and how each is derived, which is what’s needed to rebuild the accounts at recovery. It’s a one-time link-up, recommended at onboarding, that keeps CoinCover’s copy of those derivation paths continuously up to date.`]}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`Link the workspace to CoinCover Control`,children:_jsx(_components.p,{children:`The customer sets up an API user in CoinCover Control and links their Fireblocks workspace to it. Ideally this is done during onboarding.`})}),_jsx(Step,{title:`CoinCover pulls the account data every 24 hours`,children:_jsx(_components.p,{children:`Using that API access, CoinCover pulls the account’s wallet data on a 24-hour cycle, maintaining a current, complete set of the derivation paths for every vault and address in the workspace.`})}),_jsx(Step,{title:`The synced record is ready for recovery`,children:_jsx(_components.p,{children:`Because Control already holds an up-to-date set of derivation paths, a workspace recovery can return them as a CSV alongside the key material, with no manual export needed.`})})]}),`\n`,_jsx(Note,{children:_jsx(_components.p,{children:`Vault sync is optional but strongly recommended. Without it, a workspace recovery still returns the keys, but the customer has to export their own vault report from Fireblocks at recovery time or rebuild every account manually. With it in place, the current derivation paths are always ready — so we encourage customers to complete this linkage during onboarding.`})}),`\n`,_jsx(Heading,{level:`2`,id:`recovery`,children:`Recovery`}),`\n`,_jsxs(_components.p,{children:[`There are two recovery flows, matching the two backup flows. Both are initiated in `,_jsx(_components.strong,{children:`CoinCover Control`}),` and gated the same way: release only happens after identity verification and your approval policy are satisfied, with risk flags routed to manual review. When you raise the request you also supply a `,_jsx(_components.strong,{children:`public GPG key`}),` — CoinCover uses it to encrypt the recovery package so it’s protected in transit, and you decrypt it locally with the matching private key.`]}),`\n`,_jsx(Heading,{level:`3`,id:`workspace-recovery-—-when-fireblocks-is-unavailable`,children:`Workspace recovery — when Fireblocks is unavailable`}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`Request recovery through CoinCover Control`,children:_jsx(_components.p,{children:`Submit a recovery request from the CoinCover Control dashboard.`})}),_jsx(Step,{title:`Approval gate`,children:_jsx(_components.p,{children:`Release is gated by identity verification and your approval policy before any material is released.`})}),_jsx(Step,{title:`CoinCover releases the held material`,children:_jsxs(_components.p,{children:[`CoinCover returns the backup `,_jsx(_components.code,{children:`.zip`}),` and the RSA private key. If the workspace is synced, the release also includes the `,_jsx(_components.strong,{children:`vault sync package`}),` — the current derivation paths for every vault — so the customer has everything needed to rebuild all their accounts. The release is encrypted to the GPG public key you supplied, so you first decrypt it with your `,_jsx(_components.strong,{children:`GPG private key`}),` before using the material.`]})}),_jsx(Step,{title:`Reconstitute with the Fireblocks Recovery Utility`,children:_jsx(_components.p,{children:`On an air-gapped machine, the customer supplies their recovery passphrase and uses the Fireblocks Recovery Utility to decrypt the shares, reconstitute the workspace key, and move assets to a new wallet provider. The derivation data needed to rebuild every vault comes back as a CSV alongside the key material — from the synced record in Control if vault sync is set up, or from the customer’s own exported vault report if it isn’t.`})})]}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[`The `,_jsx(_components.strong,{children:`recovery passphrase`}),` set at onboarding is always the customer’s to hold — CoinCover never sees it, so it must be stored safely ahead of time.`]})}),`\n`,_jsx(Card,{title:`End result`,icon:`circle-check`,children:_jsxs(_components.p,{children:[`Assets across every vault and address in the workspace are recovered in a single operation, because all derivations come from the one master key inside the `,_jsx(_components.code,{children:`.zip`}),`.`]})}),`\n`,_jsx(Heading,{level:`3`,id:`owner-device-recovery-—-when-the-owner-lost-their-device`,children:`Owner device recovery — when the owner lost their device`}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`Put the account into recovery mode`,children:_jsx(_components.p,{children:`The Fireblocks account is placed into recovery mode on the Fireblocks side.`})}),_jsx(Step,{title:`Request recovery through CoinCover Control`,children:_jsx(_components.p,{children:`The owner requests recovery via CoinCover Control. The same approval gate applies before anything is released.`})}),_jsx(Step,{title:`CoinCover decrypts and releases the auto-passphrase`,children:_jsxs(_components.p,{children:[`CoinCover decrypts the stored auto-passphrase with the RSA private key and returns it to the customer, encrypted to the GPG public key they supplied. The customer decrypts it with their `,_jsx(_components.strong,{children:`GPG private key`}),` to obtain the plaintext auto-passphrase.`]})}),_jsx(Step,{title:`Restore to a fresh device`,children:_jsx(_components.p,{children:`On a new device, the owner enters the auto-passphrase. The Fireblocks app pulls the encrypted share from Fireblocks servers, decrypts it, and restores it to the new device’s secure enclave.`})})]}),`\n`,_jsx(Heading,{level:`2`,id:`what’s-next`,children:`What’s next`}),`\n`,_jsxs(CardGroup,{cols:2,children:[_jsx(Card,{title:`Utila`,icon:`wallet`,href:`/partner-guides/utila`,children:_jsx(_components.p,{children:`The API-based single-backup MPC integration.`})}),_jsx(Card,{title:`Fordefi`,icon:`wallet`,href:`/partner-guides/fordefi`,children:_jsx(_components.p,{children:`The console-based self-custody MPC integration.`})}),_jsx(Card,{title:`BitGo`,icon:`wallet`,href:`/partner-guides/bitgo`,children:_jsx(_components.p,{children:`Backup and recovery across the BitGo self-custody wallet.`})}),_jsx(Card,{title:`Partners overview`,icon:`handshake`,href:`/partner-guides/overview`,children:_jsx(_components.p,{children:`All CoinCover partner integrations.`})})]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Fireblocks","sidebarTitle":"Fireblocks","description":"Backup and recovery across the Fireblocks MPC workspace — the workspace backup and the owner's device key share backup.","icon":"layer-group","href":"/partner-guides/fireblocks"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"At a glance","slug":"at-a-glance","depth":2,"children":[]},{"title":"Backup","slug":"backup","depth":2,"children":[{"title":"Workspace backup","slug":"workspace-backup","depth":3,"children":[]},{"title":"Owner’s key share (device) backup","slug":"owner’s-key-share-device-backup","depth":3,"children":[]},{"title":"Vault sync","slug":"vault-sync","depth":3,"children":[]}]},{"title":"Recovery","slug":"recovery","depth":2,"children":[{"title":"Workspace recovery — when Fireblocks is unavailable","slug":"workspace-recovery-—-when-fireblocks-is-unavailable","depth":3,"children":[]},{"title":"Owner device recovery — when the owner lost their device","slug":"owner-device-recovery-—-when-the-owner-lost-their-device","depth":3,"children":[]}]},{"title":"What’s next","slug":"what’s-next","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"coincover","siteName":"Coincover Developer Docs","title":"Fireblocks - Coincover Developer Docs","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-07-24T10:53:21.589Z","originalFileLocation":"partner-guides/fireblocks.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Backup and recovery across the Fireblocks MPC workspace — the workspace backup and the owner\u0026#x27;s device key share backup.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Coincover Developer Docs\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/coincover/Wnz4s2jyTI4-WRLe/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/coincover/Wnz4s2jyTI4-WRLe/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/coincover/Wnz4s2jyTI4-WRLe/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/coincover/Wnz4s2jyTI4-WRLe/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/coincover/Wnz4s2jyTI4-WRLe/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/coincover/Wnz4s2jyTI4-WRLe/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/coincover/Wnz4s2jyTI4-WRLe/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/coincover/Wnz4s2jyTI4-WRLe/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/coincover/Wnz4s2jyTI4-WRLe/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Fireblocks - Coincover Developer Docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"Backup and recovery across the Fireblocks MPC workspace — the workspace backup and the owner\u0026#x27;s device key share backup.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Coincover Developer Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://developer.coincover.com/partner-guides/fireblocks\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://coincover.mintlify.site/_mintlify/api/og/v2?division=Documentation\u0026amp;title=Fireblocks\u0026amp;description=Backup+and+recovery+across+the+Fireblocks+MPC+workspace+%E2%80%94+the+workspace+backup+and+the+owner%27s+device+key+share+backup.\u0026amp;theme=e889e042c90bb80030a3389c\u0026amp;signature=85157df11c74dacd77adca4bb42cf96b15563d63d93a123fd72461bac9c185e2\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Fireblocks - Coincover Developer Docs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Backup and recovery across the Fireblocks MPC workspace — the workspace backup and the owner\u0026#x27;s device key share backup.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://coincover.mintlify.site/_mintlify/api/og/v2?division=Documentation\u0026amp;title=Fireblocks\u0026amp;description=Backup+and+recovery+across+the+Fireblocks+MPC+workspace+%E2%80%94+the+workspace+backup+and+the+owner%27s+device+key+share+backup.\u0026amp;theme=e889e042c90bb80030a3389c\u0026amp;signature=85157df11c74dacd77adca4bb42cf96b15563d63d93a123fd72461bac9c185e2\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/coincover/Wnz4s2jyTI4-WRLe/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Coincover Developer Docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#3939EF\">\u003clink data-mint-head rel=\"canonical\" href=\"https://developer.coincover.com/partner-guides/fireblocks\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/partner-guides/fireblocks.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://developer.coincover.com/#organization\",\"name\":\"Coincover Developer Docs\",\"url\":\"https://developer.coincover.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/coincover/YulmKC25AtRiJdum/images/CC-Logo-Black.svg?fit=max\u0026auto=format\u0026n=YulmKC25AtRiJdum\u0026q=85\u0026s=d81d260390cff9797e850679aeec6841\"}},{\"@type\":\"WebSite\",\"@id\":\"https://developer.coincover.com#website\",\"name\":\"Coincover Developer Docs\",\"url\":\"https://developer.coincover.com\",\"publisher\":{\"@id\":\"https://developer.coincover.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://developer.coincover.com/partner-guides/fireblocks#webpage\",\"url\":\"https://developer.coincover.com/partner-guides/fireblocks\",\"name\":\"Fireblocks\",\"description\":\"Backup and recovery across the Fireblocks MPC workspace — the workspace backup and the owner's device key share backup.\",\"dateModified\":\"2026-07-24T10:53:21.589Z\",\"isPartOf\":{\"@id\":\"https://developer.coincover.com#website\"}},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://developer.coincover.com/partner-guides/fireblocks#article\",\"headline\":\"Fireblocks\",\"name\":\"Fireblocks\",\"description\":\"Backup and recovery across the Fireblocks MPC workspace — the workspace backup and the owner's device key share backup.\",\"url\":\"https://developer.coincover.com/partner-guides/fireblocks\",\"mainEntityOfPage\":{\"@id\":\"https://developer.coincover.com/partner-guides/fireblocks#webpage\"},\"dateModified\":\"2026-07-24T10:53:21.589Z\",\"publisher\":{\"@id\":\"https://developer.coincover.com/#organization\"},\"isPartOf\":{\"@id\":\"https://developer.coincover.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Coincover Developer Docs\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Coincover Developer Docs","nav":{"global":null,"tabs":[{"tab":"Get Started","pages":[{"title":"Get Started","href":""}]},{"tab":"Products","pages":[{"title":"Products","href":"/wallet-provider-recovery/overview"}]},{"tab":"Partners","pages":[{"title":"Partners","sidebarTitle":"Overview","icon":"handshake","href":"/partner-guides/overview"},{"title":"BitGo","sidebarTitle":"BitGo","description":"Backup and recovery across the BitGo self-custody wallet integration pathways — API-created and UI-created wallets.","icon":"wallet","href":"/partner-guides/bitgo"},{"title":"Fireblocks","sidebarTitle":"Fireblocks","icon":"layer-group","href":"/partner-guides/fireblocks"},{"title":"Utila","sidebarTitle":"Utila","description":"Backup and recovery for the Utila MPC wallet — a single API-based backup flow and key-return recovery.","icon":"wallet","href":"/partner-guides/utila"},{"title":"Fordefi","sidebarTitle":"Fordefi","icon":"shield-halved","href":"/partner-guides/fordefi"},{"title":"Copper","sidebarTitle":"Copper","icon":"coins","href":"/partner-guides/copper"},{"title":"Dynamic","sidebarTitle":"Dynamic","icon":"bolt","href":"/partner-guides/dynamic"},{"title":"Coinbase Prime","sidebarTitle":"Coinbase Prime","icon":"building-columns","href":"/partner-guides/coinbase-prime"}]},{"tab":"Guides","pages":[{"title":"Guides","href":"/guides/validating-key-signatures"}]},{"tab":"API Reference","pages":[{"title":"API Reference","href":"/api-reference/keys/partner--assign-a-new-key-with-environment-specification"}]}]},"basePath":"","title":"Fireblocks - Coincover Developer Docs","buildId":"dpl_DTau1J5HqS9UTgVSDwGksstFWtPa","deploymentId":"dpl_DTau1J5HqS9UTgVSDwGksstFWtPa","dynamics":[],"chunks":[]}