Rakurai (1.0.0)

Rakurai API — HTTP API for Rakurai liquid and native staking, node scheduler downloads, and validator metrics.

Unsigned transactions: Stake/unstake routes return an unsigned transaction (txn as hex). Sign with the appropriate wallet keypair, then submit with POST /api/v1/send-txn.

GET with JSON body: Some validator routes expect a JSON body on GET (as implemented). Use a client that can send a body on GET.

Download OpenAPI description
Languages
Servers
Production
https://api.rakurai.io/

Native

Native stake and unstake (unsigned transactions).

Operations

Liquid

Liquid stake, unstake, and Jupiter unstake (unsigned transactions).

Operations

Autocompound

Enable or disable auto-compounding for native stake accounts (unsigned transactions).

Operations

send_transaction

Broadcast a signed transaction on-chain.

Operations

Rakurai Scheduler

List scheduler versions and download the scheduler archive (authenticated).

Download with curl using -o to save the .tar.gz, and --fail-with-body || cat <file> so HTTP errors return JSON instead of a corrupt archive.

Operations

Validator Stats

Validators list, TVL, APY, TPS, rewards, overview.

Operations

Validators (mainnet identities)

Request

Mainnet validators running the Rakurai client: identities derived from reward-collection data for the latest and previous epochs.

curl -i -X GET \
  https://api.rakurai.io/api/v1/validators

Responses

List of validator identities.

Bodyapplication/json
validatorsArray of objectsrequired
validators[].​identitystringrequired
Response
application/json
{ "validators": [ {} ] }

Validators (testnet)

Request

Testnet validators for the current RPC epoch from reward_collection_accounts.

curl -i -X GET \
  https://api.rakurai.io/api/v1/testnet/validators

Responses

Bodyapplication/json
validatorsArray of objectsrequired
validators[].​identitystring
validators[].​vote_accountstring
Response
application/json
{ "validators": [ {} ] }

TVL

Request

Sum of activated stake (TVL) across Rakurai validator identities from current and previous epoch sets.

curl -i -X GET \
  https://api.rakurai.io/api/v1/validator/tvl

Responses

Bodyapplication/json
tvlnumberrequired

Total activated stake (SOL) summed across Rakurai client validators.

Response
application/json
{ "tvl": 1234567.89 }

Delegated SOL

Request

Latest activated stake for the primary Rakurai validator identity from metrics.

curl -i -X GET \
  https://api.rakurai.io/api/v1/validator/delegated-sol

Responses

Bodyapplication/json
delegated_solnumberrequired
Response
application/json
{ "delegated_sol": 1500000.5 }

Transactions per second (TPS)

Request

Latest total_tps for the tracked Rakurai validator identity.

curl -i -X GET \
  https://api.rakurai.io/api/v1/validator/tps

Responses

Bodyapplication/json
tpsnumberrequired
Response
application/json
{ "tps": 42000 }

Liquid pool APY

Request

Latest non-zero apy_active_stake from the liquid staking pool (searches recent epochs).

curl -i -X GET \
  https://api.rakurai.io/api/v1/validator/apy-liquid

Responses

Bodyapplication/json
apynumberrequired
Response
application/json
{ "apy": 7.25 }

Compounded APY

Request

Model-compounded annualized yield from prior-epoch APY components and stake.

curl -i -X GET \
  https://api.rakurai.io/api/v1/validator/apy-compounded

Responses

Bodyapplication/json
apynumberrequired
Response
application/json
{ "apy": 8.1 }

Rakurai APY

Request

Without epochs: latest apy_total for the tracked validator.
With epochs (1–100): time series of APY by epoch (implementation excludes the latest incomplete epoch from the window).

Query
epochsinteger[ 1 .. 100 ]

When present, number of past epochs (1–100) for time-series responses.

curl -i -X GET \
  'https://api.rakurai.io/api/v1/validator/apy?epochs=1'

Responses

Scalar or series depending on query.

Bodyapplication/json
One of:
apynumberrequired
Response
application/json
{ "apy": 7.9 }

Network (cluster) APY by epoch

Request

Recent rows from cluster_apy (default last 5 epochs, configurable).

Query
epochsinteger[ 1 .. 100 ]

Number of epochs to return (1–100). Default 5.

Default 5
curl -i -X GET \
  'https://api.rakurai.io/api/v1/validator/network/apy?epochs=5'

Responses

Bodyapplication/json
apyArray of objectsrequired
apy[].​epochintegerrequired
apy[].​apynumberrequired
Response
application/json
{ "apy": [ {} ] }

Block compute units (Rakurai)

Request

Without epochs: average CU over the latest four slots for the validator.
With epochs: average CU per epoch from validator_avgs for past epochs.

Query
epochsinteger[ 1 .. 100 ]

When present, number of past epochs (1–100) for time-series responses.

curl -i -X GET \
  'https://api.rakurai.io/api/v1/validator/blockcu?epochs=1'

Responses

Bodyapplication/json
One of:
block_cunumberrequired

Average CU over the latest sampled slots.

Response
application/json
{ "block_cu": 1200000 }

Cluster block CU by epoch

Request

Query
epochsinteger[ 1 .. 100 ]

Number of epochs to return (1–100). Default 5.

Default 5
curl -i -X GET \
  'https://api.rakurai.io/api/v1/validator/network/blockcu?epochs=5'

Responses

Bodyapplication/json
block_cuArray of objectsrequired
block_cu[].​epochintegerrequired
block_cu[].​block_cunumber or null
Response
application/json
{ "block_cu": [ {} ] }

Rakurai MEV rewards (Jito tips) by epoch

Request

Query
epochsinteger[ 1 .. 100 ]

Number of epochs to return (1–100). Default 5.

Default 5
curl -i -X GET \
  'https://api.rakurai.io/api/v1/validator/mev-rewards?epochs=5'

Responses

Bodyapplication/json
mev_rewardsArray of objectsrequired
mev_rewards[].​epochintegerrequired
mev_rewards[].​mev_rewardsnumberrequired
Response
application/json
{ "mev_rewards": [ {} ] }

Cluster MEV (Jito) tip averages by epoch

Request

Query
epochsinteger[ 1 .. 100 ]

Number of epochs to return (1–100). Default 5.

Default 5
curl -i -X GET \
  'https://api.rakurai.io/api/v1/validator/network/mev-rewards?epochs=5'

Responses

Bodyapplication/json
mev_rewardsArray of objectsrequired
mev_rewards[].​epochintegerrequired
mev_rewards[].​mev_rewardsnumberrequired
Response
application/json
{ "mev_rewards": [ {} ] }

Rakurai block rewards by epoch

Request

Query
epochsinteger[ 1 .. 100 ]

Number of epochs to return (1–100). Default 5.

Default 5
curl -i -X GET \
  'https://api.rakurai.io/api/v1/validator/block-rewards?epochs=5'

Responses

Bodyapplication/json
block_rewardsArray of objectsrequired
block_rewards[].​epochintegerrequired
block_rewards[].​block_rewardsnumberrequired
Response
application/json
{ "block_rewards": [ {} ] }

Cluster block rewards by epoch

Request

Query
epochsinteger[ 1 .. 100 ]

Number of epochs to return (1–100). Default 5.

Default 5
curl -i -X GET \
  'https://api.rakurai.io/api/v1/validator/network/block-rewards?epochs=5'

Responses

Bodyapplication/json
block_rewardsArray of objectsrequired
block_rewards[].​epochintegerrequired
block_rewards[].​block_rewardsnumberrequired
Response
application/json
{ "block_rewards": [ {} ] }

Rakurai validators in current epoch

Request

Aggregate stake figures plus per-validator metrics, metadata from Postgres when available.

curl -i -X GET \
  https://api.rakurai.io/api/v1/validators/overview

Responses

Bodyapplication/json
general_dataobjectrequired
general_data.​total_Solana_stakenumber
general_data.​rakurai_Total_stakenumber
general_data.​all_validators_Rakuraiinteger
validatorsArray of objectsrequired
validators[].​identitystring
validators[].​vote_identitystring
validators[].​activated_stakenumber
validators[].​namestring
validators[].​imagestring
validators[].​descriptionstring
validators[].​websitestring
validators[].​mev_rewardsnumber
validators[].​block_rewardsnumber
validators[].​apynumber
validators[].​apy_block_rewardsnumber
validators[].​apy_jitonumber
validators[].​apy_totalnumber
Response
application/json
{ "general_data": { "total_Solana_stake": 0, "rakurai_Total_stake": 0, "all_validators_Rakurai": 0 }, "validators": [ {} ] }