curl --request POST \
--url https://api.prime.coinbase.com/v1/portfolios/{portfolio_id}/wallets/{wallet_id}/staking/unstake \
--header 'Content-Type: application/json' \
--data '
{
"idempotency_key": "<string>",
"inputs": {
"amount": "<string>",
"validator_allocations": [
{
"validator_address": "<string>",
"amount": "<string>"
}
],
"validator_address": "<string>"
},
"metadata": {
"external_id": "<string>"
}
}
'import requests
url = "https://api.prime.coinbase.com/v1/portfolios/{portfolio_id}/wallets/{wallet_id}/staking/unstake"
payload = {
"idempotency_key": "<string>",
"inputs": {
"amount": "<string>",
"validator_allocations": [
{
"validator_address": "<string>",
"amount": "<string>"
}
],
"validator_address": "<string>"
},
"metadata": { "external_id": "<string>" }
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
idempotency_key: '<string>',
inputs: {
amount: '<string>',
validator_allocations: [{validator_address: '<string>', amount: '<string>'}],
validator_address: '<string>'
},
metadata: {external_id: '<string>'}
})
};
fetch('https://api.prime.coinbase.com/v1/portfolios/{portfolio_id}/wallets/{wallet_id}/staking/unstake', 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://api.prime.coinbase.com/v1/portfolios/{portfolio_id}/wallets/{wallet_id}/staking/unstake",
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([
'idempotency_key' => '<string>',
'inputs' => [
'amount' => '<string>',
'validator_allocations' => [
[
'validator_address' => '<string>',
'amount' => '<string>'
]
],
'validator_address' => '<string>'
],
'metadata' => [
'external_id' => '<string>'
]
]),
CURLOPT_HTTPHEADER => [
"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://api.prime.coinbase.com/v1/portfolios/{portfolio_id}/wallets/{wallet_id}/staking/unstake"
payload := strings.NewReader("{\n \"idempotency_key\": \"<string>\",\n \"inputs\": {\n \"amount\": \"<string>\",\n \"validator_allocations\": [\n {\n \"validator_address\": \"<string>\",\n \"amount\": \"<string>\"\n }\n ],\n \"validator_address\": \"<string>\"\n },\n \"metadata\": {\n \"external_id\": \"<string>\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
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://api.prime.coinbase.com/v1/portfolios/{portfolio_id}/wallets/{wallet_id}/staking/unstake")
.header("Content-Type", "application/json")
.body("{\n \"idempotency_key\": \"<string>\",\n \"inputs\": {\n \"amount\": \"<string>\",\n \"validator_allocations\": [\n {\n \"validator_address\": \"<string>\",\n \"amount\": \"<string>\"\n }\n ],\n \"validator_address\": \"<string>\"\n },\n \"metadata\": {\n \"external_id\": \"<string>\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.prime.coinbase.com/v1/portfolios/{portfolio_id}/wallets/{wallet_id}/staking/unstake")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"idempotency_key\": \"<string>\",\n \"inputs\": {\n \"amount\": \"<string>\",\n \"validator_allocations\": [\n {\n \"validator_address\": \"<string>\",\n \"amount\": \"<string>\"\n }\n ],\n \"validator_address\": \"<string>\"\n },\n \"metadata\": {\n \"external_id\": \"<string>\"\n }\n}"
response = http.request(request)
puts response.read_body{
"wallet_id": "<string>",
"transaction_id": "<string>",
"activity_id": "<string>"
}Request to unstake a wallet
Creates an execution request to unstake delegated or staked funds in a wallet
curl --request POST \
--url https://api.prime.coinbase.com/v1/portfolios/{portfolio_id}/wallets/{wallet_id}/staking/unstake \
--header 'Content-Type: application/json' \
--data '
{
"idempotency_key": "<string>",
"inputs": {
"amount": "<string>",
"validator_allocations": [
{
"validator_address": "<string>",
"amount": "<string>"
}
],
"validator_address": "<string>"
},
"metadata": {
"external_id": "<string>"
}
}
'import requests
url = "https://api.prime.coinbase.com/v1/portfolios/{portfolio_id}/wallets/{wallet_id}/staking/unstake"
payload = {
"idempotency_key": "<string>",
"inputs": {
"amount": "<string>",
"validator_allocations": [
{
"validator_address": "<string>",
"amount": "<string>"
}
],
"validator_address": "<string>"
},
"metadata": { "external_id": "<string>" }
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
idempotency_key: '<string>',
inputs: {
amount: '<string>',
validator_allocations: [{validator_address: '<string>', amount: '<string>'}],
validator_address: '<string>'
},
metadata: {external_id: '<string>'}
})
};
fetch('https://api.prime.coinbase.com/v1/portfolios/{portfolio_id}/wallets/{wallet_id}/staking/unstake', 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://api.prime.coinbase.com/v1/portfolios/{portfolio_id}/wallets/{wallet_id}/staking/unstake",
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([
'idempotency_key' => '<string>',
'inputs' => [
'amount' => '<string>',
'validator_allocations' => [
[
'validator_address' => '<string>',
'amount' => '<string>'
]
],
'validator_address' => '<string>'
],
'metadata' => [
'external_id' => '<string>'
]
]),
CURLOPT_HTTPHEADER => [
"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://api.prime.coinbase.com/v1/portfolios/{portfolio_id}/wallets/{wallet_id}/staking/unstake"
payload := strings.NewReader("{\n \"idempotency_key\": \"<string>\",\n \"inputs\": {\n \"amount\": \"<string>\",\n \"validator_allocations\": [\n {\n \"validator_address\": \"<string>\",\n \"amount\": \"<string>\"\n }\n ],\n \"validator_address\": \"<string>\"\n },\n \"metadata\": {\n \"external_id\": \"<string>\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
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://api.prime.coinbase.com/v1/portfolios/{portfolio_id}/wallets/{wallet_id}/staking/unstake")
.header("Content-Type", "application/json")
.body("{\n \"idempotency_key\": \"<string>\",\n \"inputs\": {\n \"amount\": \"<string>\",\n \"validator_allocations\": [\n {\n \"validator_address\": \"<string>\",\n \"amount\": \"<string>\"\n }\n ],\n \"validator_address\": \"<string>\"\n },\n \"metadata\": {\n \"external_id\": \"<string>\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.prime.coinbase.com/v1/portfolios/{portfolio_id}/wallets/{wallet_id}/staking/unstake")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"idempotency_key\": \"<string>\",\n \"inputs\": {\n \"amount\": \"<string>\",\n \"validator_allocations\": [\n {\n \"validator_address\": \"<string>\",\n \"amount\": \"<string>\"\n }\n ],\n \"validator_address\": \"<string>\"\n },\n \"metadata\": {\n \"external_id\": \"<string>\"\n }\n}"
response = http.request(request)
puts response.read_body{
"wallet_id": "<string>",
"transaction_id": "<string>",
"activity_id": "<string>"
}Body
StakingUnstakeRequest represents a request to initiate an unstaking operation.
The client generated idempotency key for requested execution. Subsequent requests using the same key will fail
WalletUnstakeInputs contains the custom inputs for unstaking operations on a wallet. Requirements and supported fields vary by asset type.
Show child attributes
Show child attributes
WalletStakingMetadata contains optional metadata for wallet staking requests. external_id tags the discrete TWS transaction stake/unstake create; automatic reward crediting (e.g. SOL inflation) does not produce one. StakingClaimRewardsRequest intentionally omits this field; add metadata to claim rewards only if a supported network's claim flow creates a discrete TWS transaction clients need to tag.
Show child attributes
Show child attributes
Response
A successful response.
StakingUnstakeResponse contains the response data from initiating an unstaking operation.
Was this page helpful?