curl --request GET \
--url https://api.sandbox.services.payward.com/v1/earn/bonded/strategies \
--header 'API-Key: <api-key>' \
--header 'API-Nonce: <api-key>' \
--header 'API-Sign: <api-key>'import requests
url = "https://api.sandbox.services.payward.com/v1/earn/bonded/strategies"
headers = {
"API-Key": "<api-key>",
"API-Sign": "<api-key>",
"API-Nonce": "<api-key>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {'API-Key': '<api-key>', 'API-Sign': '<api-key>', 'API-Nonce': '<api-key>'}
};
fetch('https://api.sandbox.services.payward.com/v1/earn/bonded/strategies', 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.sandbox.services.payward.com/v1/earn/bonded/strategies",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"API-Key: <api-key>",
"API-Nonce: <api-key>",
"API-Sign: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.sandbox.services.payward.com/v1/earn/bonded/strategies"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("API-Key", "<api-key>")
req.Header.Add("API-Sign", "<api-key>")
req.Header.Add("API-Nonce", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.sandbox.services.payward.com/v1/earn/bonded/strategies")
.header("API-Key", "<api-key>")
.header("API-Sign", "<api-key>")
.header("API-Nonce", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sandbox.services.payward.com/v1/earn/bonded/strategies")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["API-Key"] = '<api-key>'
request["API-Sign"] = '<api-key>'
request["API-Nonce"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": [
{
"id": "ESDQCOL-WTZEU-NU55QF",
"strategy_type": "bonded",
"symbol": "ETH",
"type": "crypto",
"name": "Ethereum",
"yield_source": "staking",
"apy": "3.10",
"other_assets": [],
"bonding_period": {
"type": "fixed",
"seconds": 0,
"rewards": "not_accruing"
},
"unbonding_period": {
"type": "variable",
"seconds": 1209600,
"rewards": "not_accruing"
},
"exit_queue_period": {
"type": "fixed",
"seconds": 0,
"rewards": "accruing"
},
"reward_frequency_seconds": 604800,
"auto_compound": "enabled",
"user_min_allocation": "0.01",
"user_cap": "100",
"fee_schedule": {
"volume_basis": "shared_usd",
"tiers": [
{
"min_volume": "0",
"fee_percentage": "25"
},
{
"min_volume": "1000000",
"fee_percentage": "20"
}
]
}
}
]
}{
"error": {
"type": "earn_error",
"instance": "req_01H00000000000000000000000",
"status": 400,
"code": "bad_request",
"causes": [
{
"field": "account_id",
"message": "must be a valid account identifier"
}
]
}
}{
"error": {
"type": "earn_error",
"instance": "req_01H00000000000000000000000",
"status": 401,
"code": "unauthenticated"
}
}{
"error": {
"type": "earn_error",
"instance": "req_01H00000000000000000000000",
"status": 403,
"code": "forbidden"
}
}{
"error": {
"type": "earn_error",
"instance": "req_01H00000000000000000000000",
"status": 404,
"code": "not_found"
}
}{
"error": {
"type": "earn_error",
"instance": "req_01H00000000000000000000000",
"status": 429,
"code": "resource_exhausted"
}
}{
"error": {
"type": "earn_error",
"instance": "req_01H00000000000000000000000",
"status": 500,
"code": "internal"
}
}{
"error": {
"type": "earn_error",
"instance": "req_01H00000000000000000000000",
"status": 503,
"code": "unavailable"
}
}{
"error": {
"type": "earn_error",
"instance": "req_01H00000000000000000000000",
"status": 504,
"code": "deadline_exceeded"
}
}List Bonded Earn strategies
Returns the bonded and instant strategies available in a given country.
User-agnostic endpoint. Sorted by asset symbol (A-Z), then unbonding period (shortest first, variable last). Results are paginated.
curl --request GET \
--url https://api.sandbox.services.payward.com/v1/earn/bonded/strategies \
--header 'API-Key: <api-key>' \
--header 'API-Nonce: <api-key>' \
--header 'API-Sign: <api-key>'import requests
url = "https://api.sandbox.services.payward.com/v1/earn/bonded/strategies"
headers = {
"API-Key": "<api-key>",
"API-Sign": "<api-key>",
"API-Nonce": "<api-key>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {'API-Key': '<api-key>', 'API-Sign': '<api-key>', 'API-Nonce': '<api-key>'}
};
fetch('https://api.sandbox.services.payward.com/v1/earn/bonded/strategies', 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.sandbox.services.payward.com/v1/earn/bonded/strategies",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"API-Key: <api-key>",
"API-Nonce: <api-key>",
"API-Sign: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.sandbox.services.payward.com/v1/earn/bonded/strategies"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("API-Key", "<api-key>")
req.Header.Add("API-Sign", "<api-key>")
req.Header.Add("API-Nonce", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.sandbox.services.payward.com/v1/earn/bonded/strategies")
.header("API-Key", "<api-key>")
.header("API-Sign", "<api-key>")
.header("API-Nonce", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sandbox.services.payward.com/v1/earn/bonded/strategies")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["API-Key"] = '<api-key>'
request["API-Sign"] = '<api-key>'
request["API-Nonce"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": [
{
"id": "ESDQCOL-WTZEU-NU55QF",
"strategy_type": "bonded",
"symbol": "ETH",
"type": "crypto",
"name": "Ethereum",
"yield_source": "staking",
"apy": "3.10",
"other_assets": [],
"bonding_period": {
"type": "fixed",
"seconds": 0,
"rewards": "not_accruing"
},
"unbonding_period": {
"type": "variable",
"seconds": 1209600,
"rewards": "not_accruing"
},
"exit_queue_period": {
"type": "fixed",
"seconds": 0,
"rewards": "accruing"
},
"reward_frequency_seconds": 604800,
"auto_compound": "enabled",
"user_min_allocation": "0.01",
"user_cap": "100",
"fee_schedule": {
"volume_basis": "shared_usd",
"tiers": [
{
"min_volume": "0",
"fee_percentage": "25"
},
{
"min_volume": "1000000",
"fee_percentage": "20"
}
]
}
}
]
}{
"error": {
"type": "earn_error",
"instance": "req_01H00000000000000000000000",
"status": 400,
"code": "bad_request",
"causes": [
{
"field": "account_id",
"message": "must be a valid account identifier"
}
]
}
}{
"error": {
"type": "earn_error",
"instance": "req_01H00000000000000000000000",
"status": 401,
"code": "unauthenticated"
}
}{
"error": {
"type": "earn_error",
"instance": "req_01H00000000000000000000000",
"status": 403,
"code": "forbidden"
}
}{
"error": {
"type": "earn_error",
"instance": "req_01H00000000000000000000000",
"status": 404,
"code": "not_found"
}
}{
"error": {
"type": "earn_error",
"instance": "req_01H00000000000000000000000",
"status": 429,
"code": "resource_exhausted"
}
}{
"error": {
"type": "earn_error",
"instance": "req_01H00000000000000000000000",
"status": 500,
"code": "internal"
}
}{
"error": {
"type": "earn_error",
"instance": "req_01H00000000000000000000000",
"status": 503,
"code": "unavailable"
}
}{
"error": {
"type": "earn_error",
"instance": "req_01H00000000000000000000000",
"status": 504,
"code": "deadline_exceeded"
}
}Authorizations
Your public API key. Identifies the partner making the request.
HMAC signature over the request, computed with your private key.
Monotonically increasing nonce included in the request signature.
Query Parameters
ISO 3166-1 alpha-2 country code to filter available strategies (e.g., "US", "GB").
^[A-Z]{2}$Opaque token returned as next_page_token in the previous response. Omit to request the first page.
1 - 256Maximum number of results to return. Ignored when page_token is present.
1 <= x <= 25Returns only strategies for assets of the selected types.
Classification of the asset.
fiat, crypto, xstock, stablecoin, equity Returns only strategies backed by the selected yield sources.
Yield source that backs this strategy (e.g., "staking").
staking, base_rewards, opt_in_rewards Returns only strategies for the selected asset ticker symbols. Matching ignores case.
1