Request to unstake currency across a portfolio
curl --request POST \
--url https://api.prime.coinbase.com/v1/portfolios/{portfolio_id}/staking/unstake \
--header 'Content-Type: application/json' \
--data '
{
"idempotency_key": "<string>",
"currency_symbol": "<string>",
"amount": "<string>",
"metadata": {
"external_id": "<string>"
}
}
'import requests
url = "https://api.prime.coinbase.com/v1/portfolios/{portfolio_id}/staking/unstake"
payload = {
"idempotency_key": "<string>",
"currency_symbol": "<string>",
"amount": "<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>',
currency_symbol: '<string>',
amount: '<string>',
metadata: {external_id: '<string>'}
})
};
fetch('https://api.prime.coinbase.com/v1/portfolios/{portfolio_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}/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>',
'currency_symbol' => '<string>',
'amount' => '<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}/staking/unstake"
payload := strings.NewReader("{\n \"idempotency_key\": \"<string>\",\n \"currency_symbol\": \"<string>\",\n \"amount\": \"<string>\",\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}/staking/unstake")
.header("Content-Type", "application/json")
.body("{\n \"idempotency_key\": \"<string>\",\n \"currency_symbol\": \"<string>\",\n \"amount\": \"<string>\",\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}/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 \"currency_symbol\": \"<string>\",\n \"amount\": \"<string>\",\n \"metadata\": {\n \"external_id\": \"<string>\"\n }\n}"
response = http.request(request)
puts response.read_body{
"activity_id": "<string>",
"transaction_id": "<string>"
}{
"code": "VALIDATION_ERROR",
"message": "<string>",
"subcode": "PORTFOLIO_ID_REQUIRED",
"trace_id": "<string>"
}{
"code": "PERMISSION_DENIED",
"message": "<string>",
"subcode": "AUTH_RESOURCE_ACCESS_DENIED",
"trace_id": "<string>"
}{
"code": "RESOURCE_NOT_FOUND",
"message": "<string>",
"subcode": "AUTH_RESOURCE_NOT_FOUND",
"trace_id": "<string>"
}{
"code": "RATE_LIMIT_EXCEEDED",
"message": "<string>",
"subcode": "SERVER_RATE_LIMIT_EXCEEDED",
"trace_id": "<string>"
}{
"code": "SERVICE_UNAVAILABLE",
"message": "<string>",
"subcode": "SERVER_MAINTENANCE_MODE_ACTIVE",
"trace_id": "<string>"
}Staking
Request to unstake currency across a portfolio
Creates an execution request to unstake funds across a portfolio. This will unstake funds in one or more wallets in the portfolio, with a total bonded balance up to the requested unstake amount. This feature is gated. Please contact your account manager or primeops@coinbase.com to enable.
POST
/
v1
/
portfolios
/
{portfolio_id}
/
staking
/
unstake
Request to unstake currency across a portfolio
curl --request POST \
--url https://api.prime.coinbase.com/v1/portfolios/{portfolio_id}/staking/unstake \
--header 'Content-Type: application/json' \
--data '
{
"idempotency_key": "<string>",
"currency_symbol": "<string>",
"amount": "<string>",
"metadata": {
"external_id": "<string>"
}
}
'import requests
url = "https://api.prime.coinbase.com/v1/portfolios/{portfolio_id}/staking/unstake"
payload = {
"idempotency_key": "<string>",
"currency_symbol": "<string>",
"amount": "<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>',
currency_symbol: '<string>',
amount: '<string>',
metadata: {external_id: '<string>'}
})
};
fetch('https://api.prime.coinbase.com/v1/portfolios/{portfolio_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}/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>',
'currency_symbol' => '<string>',
'amount' => '<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}/staking/unstake"
payload := strings.NewReader("{\n \"idempotency_key\": \"<string>\",\n \"currency_symbol\": \"<string>\",\n \"amount\": \"<string>\",\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}/staking/unstake")
.header("Content-Type", "application/json")
.body("{\n \"idempotency_key\": \"<string>\",\n \"currency_symbol\": \"<string>\",\n \"amount\": \"<string>\",\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}/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 \"currency_symbol\": \"<string>\",\n \"amount\": \"<string>\",\n \"metadata\": {\n \"external_id\": \"<string>\"\n }\n}"
response = http.request(request)
puts response.read_body{
"activity_id": "<string>",
"transaction_id": "<string>"
}{
"code": "VALIDATION_ERROR",
"message": "<string>",
"subcode": "PORTFOLIO_ID_REQUIRED",
"trace_id": "<string>"
}{
"code": "PERMISSION_DENIED",
"message": "<string>",
"subcode": "AUTH_RESOURCE_ACCESS_DENIED",
"trace_id": "<string>"
}{
"code": "RESOURCE_NOT_FOUND",
"message": "<string>",
"subcode": "AUTH_RESOURCE_NOT_FOUND",
"trace_id": "<string>"
}{
"code": "RATE_LIMIT_EXCEEDED",
"message": "<string>",
"subcode": "SERVER_RATE_LIMIT_EXCEEDED",
"trace_id": "<string>"
}{
"code": "SERVICE_UNAVAILABLE",
"message": "<string>",
"subcode": "SERVER_MAINTENANCE_MODE_ACTIVE",
"trace_id": "<string>"
}Path Parameters
The portfolio ID
Body
application/json
The client generated idempotency key (uuid required) for requested execution. Subsequent requests using the same key will not create new transactions.
The currency symbol to unstake
The quantity of the chosen currency to unstake
Show child attributes
Show child attributes
ValidatorProvider enumerates the ETH validator service providers accepted for unstaking.
Available options:
VALIDATOR_PROVIDER_COINBASE_CLOUD, VALIDATOR_PROVIDER_MAVAN, VALIDATOR_PROVIDER_FIGMENT, VALIDATOR_PROVIDER_CODEFI, VALIDATOR_PROVIDER_ATTESTANT, VALIDATOR_PROVIDER_GALAXY Was this page helpful?