curl --request POST \
--url https://api.prime.coinbase.com/v1/portfolios/{portfolio_id}/wallets/{wallet_id}/staking/initiate \
--header 'Content-Type: application/json' \
--data '
{
"idempotency_key": "<string>",
"inputs": {
"amount": "<string>",
"validator_address": "<string>",
"end_date": "<string>"
},
"metadata": {
"external_id": "<string>"
}
}
'import requests
url = "https://api.prime.coinbase.com/v1/portfolios/{portfolio_id}/wallets/{wallet_id}/staking/initiate"
payload = {
"idempotency_key": "<string>",
"inputs": {
"amount": "<string>",
"validator_address": "<string>",
"end_date": "<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_address: '<string>', end_date: '<string>'},
metadata: {external_id: '<string>'}
})
};
fetch('https://api.prime.coinbase.com/v1/portfolios/{portfolio_id}/wallets/{wallet_id}/staking/initiate', 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/initiate",
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_address' => '<string>',
'end_date' => '<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/initiate"
payload := strings.NewReader("{\n \"idempotency_key\": \"<string>\",\n \"inputs\": {\n \"amount\": \"<string>\",\n \"validator_address\": \"<string>\",\n \"end_date\": \"<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/initiate")
.header("Content-Type", "application/json")
.body("{\n \"idempotency_key\": \"<string>\",\n \"inputs\": {\n \"amount\": \"<string>\",\n \"validator_address\": \"<string>\",\n \"end_date\": \"<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/initiate")
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_address\": \"<string>\",\n \"end_date\": \"<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>"
}{
"code": "VALIDATION_ERROR",
"message": "<string>",
"subcode": "ENTITY_ID_INVALID",
"trace_id": "<string>"
}{
"code": "AUTHENTICATION_FAILED",
"message": "<string>",
"subcode": "AUTH_UNAUTHENTICATED",
"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>"
}Request to stake or delegate a wallet
Creates an execution request to stake or delegate funds to a validator
curl --request POST \
--url https://api.prime.coinbase.com/v1/portfolios/{portfolio_id}/wallets/{wallet_id}/staking/initiate \
--header 'Content-Type: application/json' \
--data '
{
"idempotency_key": "<string>",
"inputs": {
"amount": "<string>",
"validator_address": "<string>",
"end_date": "<string>"
},
"metadata": {
"external_id": "<string>"
}
}
'import requests
url = "https://api.prime.coinbase.com/v1/portfolios/{portfolio_id}/wallets/{wallet_id}/staking/initiate"
payload = {
"idempotency_key": "<string>",
"inputs": {
"amount": "<string>",
"validator_address": "<string>",
"end_date": "<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_address: '<string>', end_date: '<string>'},
metadata: {external_id: '<string>'}
})
};
fetch('https://api.prime.coinbase.com/v1/portfolios/{portfolio_id}/wallets/{wallet_id}/staking/initiate', 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/initiate",
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_address' => '<string>',
'end_date' => '<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/initiate"
payload := strings.NewReader("{\n \"idempotency_key\": \"<string>\",\n \"inputs\": {\n \"amount\": \"<string>\",\n \"validator_address\": \"<string>\",\n \"end_date\": \"<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/initiate")
.header("Content-Type", "application/json")
.body("{\n \"idempotency_key\": \"<string>\",\n \"inputs\": {\n \"amount\": \"<string>\",\n \"validator_address\": \"<string>\",\n \"end_date\": \"<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/initiate")
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_address\": \"<string>\",\n \"end_date\": \"<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>"
}{
"code": "VALIDATION_ERROR",
"message": "<string>",
"subcode": "ENTITY_ID_INVALID",
"trace_id": "<string>"
}{
"code": "AUTHENTICATION_FAILED",
"message": "<string>",
"subcode": "AUTH_UNAUTHENTICATED",
"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>"
}Body
StakingInitiateRequest represents a request to initiate a staking operation.
The client generated idempotency key for requested execution. Subsequent requests using the same key will fail
WalletStakeInputs contains the custom inputs for staking 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. Optional metadata to attach to this staking or delegation request. Automatic reward crediting (such as SOL inflation) does not produce a taggable transaction and therefore does not support metadata; see the field descriptions below for details.
Show child attributes
Show child attributes
Response
A successful response.
StakingInitiateResponse contains the response data from initiating a staking operation.
Was this page helpful?