Recover the client's wallet
curl --request POST \
--url https://mpc-client.portalhq.io/v1/recover \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"backupResponse": "{\"SECP256K1\":{\"share\":\"share\",\"id\":\"shareId\"},\"ED25519\":{\"share\":\"share\",\"id\":\"shareId\"}}"
}
'import requests
url = "https://mpc-client.portalhq.io/v1/recover"
payload = { "backupResponse": "{\"SECP256K1\":{\"share\":\"share\",\"id\":\"shareId\"},\"ED25519\":{\"share\":\"share\",\"id\":\"shareId\"}}" }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
backupResponse: '{"SECP256K1":{"share":"share","id":"shareId"},"ED25519":{"share":"share","id":"shareId"}}'
})
};
fetch('https://mpc-client.portalhq.io/v1/recover', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://mpc-client.portalhq.io/v1/recover",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'backupResponse' => '{"SECP256K1":{"share":"share","id":"shareId"},"ED25519":{"share":"share","id":"shareId"}}'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://mpc-client.portalhq.io/v1/recover"
payload := strings.NewReader("{\n \"backupResponse\": \"{\\\"SECP256K1\\\":{\\\"share\\\":\\\"share\\\",\\\"id\\\":\\\"shareId\\\"},\\\"ED25519\\\":{\\\"share\\\":\\\"share\\\",\\\"id\\\":\\\"shareId\\\"}}\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://mpc-client.portalhq.io/v1/recover")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"backupResponse\": \"{\\\"SECP256K1\\\":{\\\"share\\\":\\\"share\\\",\\\"id\\\":\\\"shareId\\\"},\\\"ED25519\\\":{\\\"share\\\":\\\"share\\\",\\\"id\\\":\\\"shareId\\\"}}\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://mpc-client.portalhq.io/v1/recover")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"backupResponse\": \"{\\\"SECP256K1\\\":{\\\"share\\\":\\\"share\\\",\\\"id\\\":\\\"shareId\\\"},\\\"ED25519\\\":{\\\"share\\\":\\\"share\\\",\\\"id\\\":\\\"shareId\\\"}}\"\n}"
response = http.request(request)
puts response.read_body{
"SECP256K1": {
"share": "eyJjbGl...",
"id": "clu32l6c8008wuvz52jokyo3r"
},
"ED25519": {
"share": "eyJjbGl...",
"id": "clu32l9310087evz5u5v9k1ao"
}
}{
"id": "BAD_REQUEST",
"message": "Can't parse the request body"
}"Authorization header is missing"Wallet Management
Recover the client's wallet
Recovers signing shares for the wallet using backup shares. After storing the recovered MPC shares, confirm storage with the Client API’s update signing share pairs statuses endpoint before attempting to sign.
POST
/
v1
/
recover
Recover the client's wallet
curl --request POST \
--url https://mpc-client.portalhq.io/v1/recover \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"backupResponse": "{\"SECP256K1\":{\"share\":\"share\",\"id\":\"shareId\"},\"ED25519\":{\"share\":\"share\",\"id\":\"shareId\"}}"
}
'import requests
url = "https://mpc-client.portalhq.io/v1/recover"
payload = { "backupResponse": "{\"SECP256K1\":{\"share\":\"share\",\"id\":\"shareId\"},\"ED25519\":{\"share\":\"share\",\"id\":\"shareId\"}}" }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
backupResponse: '{"SECP256K1":{"share":"share","id":"shareId"},"ED25519":{"share":"share","id":"shareId"}}'
})
};
fetch('https://mpc-client.portalhq.io/v1/recover', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://mpc-client.portalhq.io/v1/recover",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'backupResponse' => '{"SECP256K1":{"share":"share","id":"shareId"},"ED25519":{"share":"share","id":"shareId"}}'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://mpc-client.portalhq.io/v1/recover"
payload := strings.NewReader("{\n \"backupResponse\": \"{\\\"SECP256K1\\\":{\\\"share\\\":\\\"share\\\",\\\"id\\\":\\\"shareId\\\"},\\\"ED25519\\\":{\\\"share\\\":\\\"share\\\",\\\"id\\\":\\\"shareId\\\"}}\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://mpc-client.portalhq.io/v1/recover")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"backupResponse\": \"{\\\"SECP256K1\\\":{\\\"share\\\":\\\"share\\\",\\\"id\\\":\\\"shareId\\\"},\\\"ED25519\\\":{\\\"share\\\":\\\"share\\\",\\\"id\\\":\\\"shareId\\\"}}\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://mpc-client.portalhq.io/v1/recover")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"backupResponse\": \"{\\\"SECP256K1\\\":{\\\"share\\\":\\\"share\\\",\\\"id\\\":\\\"shareId\\\"},\\\"ED25519\\\":{\\\"share\\\":\\\"share\\\",\\\"id\\\":\\\"shareId\\\"}}\"\n}"
response = http.request(request)
puts response.read_body{
"SECP256K1": {
"share": "eyJjbGl...",
"id": "clu32l6c8008wuvz52jokyo3r"
},
"ED25519": {
"share": "eyJjbGl...",
"id": "clu32l9310087evz5u5v9k1ao"
}
}{
"id": "BAD_REQUEST",
"message": "Can't parse the request body"
}"Authorization header is missing"Authorizations
Client API Key or Client Session Token
Body
application/json
Request body for recovering a wallet.
JSON-stringified response body from the backup endpoint.
Was this page helpful?
⌘I