curl --request GET \
--url https://api.sandbox.services.payward.com/v1/accounts/{account_id}/earn/bonded/allocation-states \
--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/accounts/{account_id}/earn/bonded/allocation-states"
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/accounts/{account_id}/earn/bonded/allocation-states', 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/accounts/{account_id}/earn/bonded/allocation-states",
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/accounts/{account_id}/earn/bonded/allocation-states"
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/accounts/{account_id}/earn/bonded/allocation-states")
.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/accounts/{account_id}/earn/bonded/allocation-states")
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{
"quote_symbol": "USD",
"quote_type": "fiat",
"data": [
{
"strategy_id": "ESQEFMZ-JPPIY-3KXFJ2",
"symbol": "ETH",
"type": "crypto",
"name": "Ethereum",
"amount": "2.0",
"amount_in_quote": "4000.0",
"state": "bonding",
"next_state": "earning",
"transitions_at": "2026-06-01T12:00:00Z"
}
]
}{
"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 allocation states
Returns the current allocation transitions for the specified account, ordered by when each allocation leaves its current state (soonest first).
A transition is a move to the next state: bonding to earning, exit queue to unbonding, or unbonding to available. Each entry also estimates when the funds become available, which is absent while bonding. For an exit queue entry, the estimate includes the unbonding period. Use it to follow funds after a deallocation.
Use state more than once to return several states. Results are paginated.
curl --request GET \
--url https://api.sandbox.services.payward.com/v1/accounts/{account_id}/earn/bonded/allocation-states \
--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/accounts/{account_id}/earn/bonded/allocation-states"
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/accounts/{account_id}/earn/bonded/allocation-states', 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/accounts/{account_id}/earn/bonded/allocation-states",
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/accounts/{account_id}/earn/bonded/allocation-states"
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/accounts/{account_id}/earn/bonded/allocation-states")
.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/accounts/{account_id}/earn/bonded/allocation-states")
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{
"quote_symbol": "USD",
"quote_type": "fiat",
"data": [
{
"strategy_id": "ESQEFMZ-JPPIY-3KXFJ2",
"symbol": "ETH",
"type": "crypto",
"name": "Ethereum",
"amount": "2.0",
"amount_in_quote": "4000.0",
"state": "bonding",
"next_state": "earning",
"transitions_at": "2026-06-01T12:00:00Z"
}
]
}{
"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.
Path Parameters
Globally unique public identifier for an account.
14 - 42Query Parameters
Ticker symbol of the quote asset for converted amounts (e.g., "USD", "EUR").
10Type of the quote asset. Only "fiat" is supported.
16Restrict results to one bonded earn strategy. Identifier of the bonded earn strategy.
20^ES[A-Z2-7]{5}-[A-Z2-7]{5}-[A-Z2-7]{6}$"ESQEFMZ-JPPIY-3KXFJ2"
Restrict results to one or more current allocation states. Omit to return all states.
Lifecycle state with a pending transition. This excludes earning, unlike BondedAllocationState.
bonding, exit_queue, unbonding 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 <= 25Response
Successful response
Allocation transitions for the requested page.
Show child attributes
Show child attributes
Symbol of the quote asset used for converted amounts (e.g., "USD", "EUR").
Type of the quote asset (e.g., "fiat").
Opaque token for retrieving the next page. Absent when there are no more results.
1 - 256