Backing up your own wallets rather than your customers’?
You want Recovery for Institutions, which uses the standard endpoints. This guide is for providers holding recovery material on behalf of many downstream customers.
You want Recovery for Institutions, which uses the standard endpoints. This guide is for providers holding recovery material on behalf of many downstream customers.
The shape of an integration
Every Partner Key Service integration follows the same three moves:Assign a key
You call us with an identifier for your customer. We generate an RSA key pair in our enclaves and return the public key, hex-encoded.
Encrypt client-side
Your customer’s recovery material is encrypted with the public key — RSA-OAEP with SHA-256 — before it ever leaves their environment. We never see plaintext.
Step 1 — Authenticate
Authenticate with a Bearer token in theAuthorization header. CoinCover supports both JWT tokens and long-lived API keys. Your sandbox credentials are in your welcome pack. Partner endpoints require a token with partner-endpoint scope.
Step 2 — Choose HOT or COLD at assignment time
Every key sits in one of two environments. The choice is fixed for the life of the key, so pick deliberately.| Environment | When to use it |
|---|---|
HOT | Online generation and storage. Best for high-frequency operations, and applications that need low-latency key access. |
COLD | Offline generation and storage with enhanced isolation. Best for high value wallets, high-value transactions, and the strictest security requirements. |
key_environment is required — there’s no default.
Step 3 — Assign a key to a customer
CallPOST /v1/partner/keys with an identifier for your customer and your tenant structure. organisation and package are required so the key is filed against the right downstream customer. We return a stable key_id and the public key you’ll use to encrypt their data.
key_id against your customer record. You’ll reference it in your own audit logs and customer-support tooling.
The response also includes a signature over the public_key, signed by the enclave that generated the key. During integration, CoinCover issues you a verification key — use it to verify the signature on every assign-key response. A successful verification confirms the public key really came from a legitimate CoinCover enclave; if it fails, treat the response as untrusted and escalate before encrypting any recovery material.
The full request and response schema is in the API reference.
Step 4 — Encrypt client-side
The public key comes back hex-encoded. Convert it to PEM, then encrypt with RSA-OAEP using SHA-256 as both the hash and MGF1 hash.The checksum must be SHA-256 of the plaintext, not the ciphertext.
Step 5 — Store encrypted data
Send the ciphertext, the plaintext checksum, and the public key toPOST /v1/partner/secure/data. We use the public key to identify the storage location — there’s no need to repeat the environment. On the partner endpoint the checksum is required.
Step 6 — Upload encrypted files
For binary backups — wallet seed files, encrypted archives — usePOST /v1/partner/secure/file. This is multipart/form-data and expects the file to already be encrypted on your side. CoinCover applies no additional encryption server-side.
Step 7 — Test before you ship
Run through the going to production checklist before you cut any production traffic to live keys. The most common issues we see at this stage are:- Hex-to-PEM conversion off by one byte (always verify with a known-good public key first)
- OAEP hash and MGF1 hash mismatched (both should be SHA-256)
- Checksum computed over ciphertext rather than plaintext
- Sandbox base URL still set in production config
What’s next
API reference
Every endpoint, request, and response.
Testing & sandbox
The sandbox matrix to run before production.