Parafi Solana API
ParaFi validator, rewards, stake, and Solana network endpoints.
ParaFi validator, rewards, stake, and Solana network endpoints.
openapi: 3.0.3
info:
title: ParaFi Tech Avalanche Solana API
version: 1.1.0
description: Public read-only API for ParaFi validator data, Solana rewards and network metrics, Ethereum network stats, Avalanche validator data, and market prices. Designed for dashboards, agents, and programmatic integrations.
termsOfService: https://parafi.tech/terms
contact:
name: ParaFi Tech
url: https://parafi.tech
email: info@parafi.tech
license:
name: MIT
servers:
- url: https://parafi.tech
description: Production
- url: http://localhost:3000
description: Local development
tags:
- name: Solana
description: ParaFi validator, rewards, stake, and Solana network endpoints.
paths:
/api/solana/validator-apy:
get:
tags:
- Solana
summary: Get validator APY/APR with MEV contribution and status
operationId: getSolanaValidatorApy
parameters:
- name: epoch
in: query
required: false
schema:
type: integer
minimum: 0
description: 'Override epoch for calculation (default: current)'
- name: force
in: query
required: false
schema:
type: boolean
default: false
description: Bypass cache if true
responses:
'200':
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/APYData'
'500':
description: Failed to fetch APY data
/api/solana/network-validators:
get:
tags:
- Solana
summary: Network-wide validator counts and RPC nodes
operationId: getSolanaNetworkValidators
parameters:
- name: force
in: query
required: false
schema:
type: boolean
default: false
description: Bypass cache if true
responses:
'200':
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/NetworkValidatorsData'
'500':
description: Failed to fetch validator data
/api/solana/supply:
get:
tags:
- Solana
summary: Solana supply metrics
operationId: getSolanaSupply
parameters:
- name: force
in: query
required: false
schema:
type: boolean
default: false
description: Bypass cache if true
responses:
'200':
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/NetworkSupplyData'
'500':
description: Failed to fetch supply data
/api/solana/simple-rewards/epoch/{epochNumber}:
get:
tags:
- Solana
summary: Delegator rewards for an epoch (supports 'current')
operationId: getSolanaSimpleRewardsByEpoch
parameters:
- name: epochNumber
in: path
required: true
schema:
type: string
pattern: ^(\d+|current)$
description: Epoch number or 'current'
- name: page
in: query
schema:
type: integer
minimum: 1
maximum: 1000
default: 1
- name: limit
in: query
schema:
type: integer
minimum: 1
maximum: 500
default: 100
- name: sortBy
in: query
schema:
type: string
enum:
- rewards
- staker
- validator
- stake
- stakeAmount
default: rewards
- name: sortOrder
in: query
schema:
type: string
enum:
- asc
- desc
default: desc
- name: minReward
in: query
schema:
type: number
- name: maxReward
in: query
schema:
type: number
- name: validatorVoteAccount
in: query
schema:
type: string
description: Solana vote account public key
- name: includeInactive
in: query
schema:
type: boolean
default: false
- name: force
in: query
schema:
type: boolean
default: false
responses:
'200':
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/SimpleRewardsEpochResponse'
'400':
description: Validation error
'500':
description: Internal server error
/api/solana/network-apy:
get:
tags:
- Solana
summary: Network-wide average APY across all validators
operationId: getSolanaNetworkApy
parameters:
- name: force
in: query
required: false
schema:
type: boolean
default: false
responses:
'200':
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/NetworkAPYData'
examples:
example:
value:
apy: 7.45
inflationAPY: 6.8
mevAPY: 0.65
averageCommission: 7.2
stakingRatio: 65.4
lastUpdated: '2025-01-28T12:00:00.000Z'
cacheSource: redis
'500':
description: Failed to fetch network APY
/api/solana/validator-active-stake:
get:
tags:
- Solana
summary: Validator active stake, commission, vote status
operationId: getSolanaValidatorActiveStake
parameters:
- name: force
in: query
required: false
schema:
type: boolean
default: false
responses:
'200':
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/ActiveStakeData'
examples:
example:
value:
activeStake: 5200000000000
activeStakeInSol: 5200.0
commission: 0
lastVote: 312000000
epochVoteAccount: true
delinquent: false
lastUpdated: '2025-01-28T12:00:00.000Z'
cacheSource: redis
'500':
description: Failed to fetch active stake
/api/solana/validator-stake:
get:
tags:
- Solana
summary: Total stake breakdown with delegator counts
operationId: getSolanaValidatorStake
parameters:
- name: force
in: query
required: false
schema:
type: boolean
default: false
responses:
'200':
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/TotalStakeData'
examples:
example:
value:
totalStake: 5500000000000
totalStakeInSol: 5500.0
totalStakeAccounts: 150
activeStakeAccounts: 145
delegatorCount: 120
activeStake: 5200000000000
inactiveStake: 300000000000
lastUpdated: '2025-01-28T12:00:00.000Z'
cacheSource: redis
'500':
description: Failed to fetch stake data
/api/solana/validator-delegators:
get:
tags:
- Solana
summary: List all delegators with stake amounts
operationId: getSolanaValidatorDelegators
description: Returns the current stake-account level delegator list for the ParaFi validator, along with aggregate totals such as active stake accounts and delegator count.
parameters:
- name: force
in: query
required: false
schema:
type: boolean
default: false
responses:
'200':
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/DelegatorsData'
examples:
example:
value:
delegators:
- stakeAccount: ExampleStakeAccount111111111111111111111111111
stakerAuthority: ExampleStaker1111111111111111111111111111111111
activeStake: '125000000000'
totalStake: 5500000000000
totalStakeInSol: 5500
totalStakeAccounts: 150
activeStakeAccounts: 145
delegatorCount: 120
lastUpdated: '2025-01-28T12:00:00.000Z'
cacheSource: redis
'500':
description: Failed to fetch delegator data
/api/solana/rewards/staker/{address}:
get:
tags:
- Solana
summary: Reward history for a specific staker address
operationId: getSolanaStakerRewards
description: Use this route to retrieve reward history and summary information for a wallet or staker authority across epochs.
parameters:
- name: address
in: path
required: true
schema:
type: string
description: Staker wallet address
- name: page
in: query
schema:
type: integer
minimum: 1
default: 1
- name: limit
in: query
schema:
type: integer
minimum: 1
maximum: 500
default: 100
- name: startEpoch
in: query
schema:
type: integer
- name: endEpoch
in: query
schema:
type: integer
- name: stakeAccount
in: query
schema:
type: string
description: Filter by specific stake account
- name: force
in: query
schema:
type: boolean
default: false
responses:
'200':
description: Successful response
content:
application/json:
schema:
type: object
properties:
stakerProfile:
type: object
rewards:
type: array
items:
type: object
summary:
type: object
examples:
example:
value:
stakerProfile:
address: ExampleStaker1111111111111111111111111111111111
rewards:
- epoch: 750
stakeAccount: ExampleStakeAccount111111111111111111111111111
totalRewardsActual: '123456789'
summary:
totalRewards: '123456789'
epochsTracked: 1
'400':
description: Invalid address
'500':
description: Internal server error
/api/solana/rewards/validator/{voteAccount}:
get:
tags:
- Solana
summary: Reward distribution for all delegators of a validator
operationId: getSolanaValidatorRewards
parameters:
- name: voteAccount
in: path
required: true
schema:
type: string
description: Validator vote account address
- name: page
in: query
schema:
type: integer
minimum: 1
default: 1
- name: limit
in: query
schema:
type: integer
minimum: 1
maximum: 500
default: 100
- name: startEpoch
in: query
schema:
type: integer
- name: endEpoch
in: query
schema:
type: integer
- name: force
in: query
schema:
type: boolean
default: false
responses:
'200':
description: Successful response
content:
application/json:
schema:
type: object
properties:
validatorInfo:
type: object
rewardsDistribution:
type: array
items:
type: object
performanceMetrics:
type: object
summary:
type: object
'400':
description: Invalid vote account
'500':
description: Internal server error
/api/solana/rewards/epoch/{epochNumber}:
get:
tags:
- Solana
summary: All delegator rewards for a specific epoch
operationId: getSolanaEpochRewards
parameters:
- name: epochNumber
in: path
required: true
schema:
type: string
pattern: ^(\d+|current)$
description: Epoch number or 'current'
- name: page
in: query
schema:
type: integer
minimum: 1
default: 1
- name: limit
in: query
schema:
type: integer
minimum: 1
maximum: 500
default: 100
- name: sortBy
in: query
schema:
type: string
enum:
- rewards
- staker
- validator
- stake
- stakeAmount
default: rewards
- name: sortOrder
in: query
schema:
type: string
enum:
- asc
- desc
default: desc
- name: validatorVoteAccount
in: query
schema:
type: string
description: Filter by validator
- name: includeInactive
in: query
schema:
type: boolean
default: false
- name: force
in: query
schema:
type: boolean
default: false
responses:
'200':
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/SimpleRewardsEpochResponse'
'400':
description: Validation error
'500':
description: Internal server error
/api/solana/mev-rewards:
get:
tags:
- Solana
summary: MEV rewards from Jito for a range of epochs
operationId: getSolanaMevRewards
parameters:
- name: startEpoch
in: query
required: true
schema:
type: integer
- name: endEpoch
in: query
required: true
schema:
type: integer
responses:
'200':
description: Successful response
content:
application/json:
schema:
type: object
properties:
epochs:
type: array
items:
type: object
rewards:
type: object
metadata:
type: object
'400':
description: Missing startEpoch or endEpoch
'500':
description: Internal server error
/api/solana/compute-units:
get:
tags:
- Solana
summary: Current block compute units utilization
operationId: getSolanaComputeUnits
parameters:
- name: slot
in: query
required: false
schema:
type: integer
description: 'Specific slot (default: latest)'
responses:
'200':
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/ComputeUnitsData'
examples:
example:
value:
slot: 312000000
computeUnitsConsumed: 35000000
computeUnitsTotal: 48000000
utilizationPercentage: 72.9
timestamp: '2025-01-28T12:00:00.000Z'
'500':
description: Failed to fetch compute units
/api/solana/compute-units/history:
get:
tags:
- Solana
summary: Historical compute units utilization time series
operationId: getSolanaComputeUnitsHistory
parameters:
- name: interval
in: query
schema:
type: integer
enum:
- 1
- 5
- 15
- 60
description: Rollup interval in minutes
- name: window
in: query
schema:
type: integer
maximum: 1440
description: Number of data points
responses:
'200':
description: Array of [timestamp, utilization] tuples
content:
application/json:
schema:
type: array
items:
type: array
items:
type: number
minItems: 2
maxItems: 2
/api/solana/leader-slots:
get:
tags:
- Solana
summary: Leader slot statistics (blocks produced, missed, skip rate)
operationId: getSolanaLeaderSlots
parameters:
- name: epoch
in: query
required: false
schema:
type: integer
- name: force
in: query
required: false
schema:
type: boolean
default: false
responses:
'200':
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/LeaderSlotsData'
examples:
example:
value:
totalLeaderSlots: 48
blocksProduced: 47
blocksMissed: 1
skipRate: 2.08
epoch: 750
lastUpdated: '2025-01-28T12:00:00.000Z'
/api/solana/sidecar-stats:
get:
tags:
- Solana
summary: Real-time network performance (TPS, block time, compute units)
operationId: getSolanaSidecarStats
parameters:
- name: count
in: query
schema:
type: integer
minimum: 1
maximum: 200
description: Number of data points
- name: smooth
in: query
schema:
type: integer
minimum: 1
maximum: 25
description: Smoothing window
responses:
'200':
description: Successful response
content:
application/json:
schema:
type: object
properties:
series:
type: array
items:
type: object
latest:
type: object
cacheSource:
type: string
/api/solana/network-stats/history:
get:
tags:
- Solana
summary: Historical network performance (TPS, block time, compute utilization)
operationId: getSolanaNetworkStatsHistory
parameters:
- name: granularity
in: query
schema:
type: string
enum:
- hourly
- daily
- name: days
in: query
schema:
type: integer
maximum: 365
- name: hours
in: query
schema:
type: integer
maximum: 168
- name: startDate
in: query
schema:
type: string
format: date-time
- name: endDate
in: query
schema:
type: string
format: date-time
responses:
'200':
description: Successful response
content:
application/json:
schema:
type: object
properties:
granularity:
type: string
startDate:
type: string
endDate:
type: string
count:
type: integer
data:
type: array
items:
type: object
/api/solana/delegators:
get:
tags:
- Solana
summary: All delegators with stake amounts and account details
operationId: getSolanaDelegators
parameters:
- name: force
in: query
required: false
schema:
type: boolean
default: false
responses:
'200':
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/DelegatorsData'
'500':
description: Failed to fetch delegators
components:
schemas:
LeaderSlotsData:
type: object
properties:
totalLeaderSlots:
type: integer
blocksProduced:
type: integer
blocksMissed:
type: integer
skipRate:
type: number
epoch:
type: integer
lastUpdated:
type: string
format: date-time
cacheSource:
type: string
required:
- totalLeaderSlots
- blocksProduced
- blocksMissed
- skipRate
- epoch
NetworkSupplyData:
type: object
properties:
circulating:
type: integer
description: Lamports
nonCirculating:
type: integer
description: Lamports
total:
type: integer
description: Lamports
circulatingSOL:
type: number
nonCirculatingSOL:
type: number
totalSOL:
type: number
lastUpdated:
type: string
format: date-time
cacheSource:
type: string
enum:
- redis
- fresh
isStale:
type: boolean
required:
- circulating
- nonCirculating
- total
- circulatingSOL
- nonCirculatingSOL
- totalSOL
- lastUpdated
SimpleRewardsEpochResponse:
type: object
properties:
epochInfo:
type: object
properties:
epoch:
type: integer
totalParticipants:
type: integer
totalRewardsDistributed:
type: string
totalStakeActive:
type: string
averageRewardPerParticipant:
type: string
uniqueValidators:
type: integer
uniqueStakers:
type: integer
rewardConsistency:
type: integer
rewardsData:
type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/RewardEntry'
pagination:
$ref: '#/components/schemas/Pagination'
statistics:
type: object
properties:
totalRewards:
type: string
totalStake:
type: string
averageReward:
type: string
medianReward:
type: string
rewardDistribution:
type: array
items:
type: number
topStakers:
type: array
items:
type: object
topValidators:
type: array
items:
type: object
dataQuality:
type: object
properties:
totalSnapshots:
type: integer
completeData:
type: integer
preliminaryData:
type: integer
dataCompletenessPercentage:
type: integer
mevDataTiming:
type: object
properties:
percentageWithMev:
type: integer
recordsWithMev:
type: integer
pendingMevRecords:
type: integer
estimatedNextMevUpdate:
type: string
format: date-time
validationAccuracy:
type: integer
summary:
type: object
properties:
calculationMethod:
type: string
enum:
- balance_difference
cacheSource:
type: string
enum:
- fresh
- redis
lastUpdated:
type: string
format: date-time
ActiveStakeData:
type: object
properties:
activeStake:
type: integer
description: Lamports
activeStakeInSol:
type: number
commission:
type: integer
lastVote:
type: integer
epochVoteAccount:
type: boolean
delinquent:
type: boolean
lastUpdated:
type: string
format: date-time
cacheSource:
type: string
enum:
- redis
- fresh
isStale:
type: boolean
required:
- activeStake
- activeStakeInSol
- commission
- lastVote
- epochVoteAccount
- delinquent
- lastUpdated
NetworkValidatorsData:
type: object
properties:
activeValidators:
type: integer
totalValidators:
type: integer
delinquentValidators:
type: integer
activePercentage:
type: number
rpcNodes:
type: integer
totalNodes:
type: integer
lastUpdated:
type: string
format: date-time
cacheSource:
type: string
enum:
- redis
- fresh
isStale:
type: boolean
required:
- activeValidators
- totalValidators
- delinquentValidators
- activePercentage
- rpcNodes
- totalNodes
- lastUpdated
TotalStakeData:
type: object
properties:
totalStake:
type: integer
description: Lamports
totalStakeInSol:
type: number
totalStakeAccounts:
type: integer
activeStakeAccounts:
type: integer
delegatorCount:
type: integer
activeStake:
type: integer
inactiveStake:
type: integer
delegatedStake:
type: integer
lastUpdated:
type: string
format: date-time
cacheSource:
type: string
enum:
- redis
- fresh
isStale:
type: boolean
required:
- totalStake
- totalStakeInSol
- totalStakeAccounts
- activeStakeAccounts
- delegatorCount
- lastUpdated
APYData:
type: object
properties:
apy:
type: number
apr:
type: number
epoch:
type: integer
hasMevData:
type: boolean
inflationRewards:
type: number
mevRewards:
type: number
totalRewards:
type: number
lastUpdated:
type: string
format: date-time
cacheSource:
type: string
enum:
- redis
- fresh
dataSource:
type: string
enum:
- calculated
- estimated
mevDataAge:
type: string
enum:
- current
- previous
- fallback
required:
- apy
- apr
- epoch
- hasMevData
- inflationRewards
- mevRewards
- totalRewards
- lastUpdated
- dataSource
DelegatorsData:
type: object
properties:
delegators:
type: array
items:
type: object
totalStake:
type: integer
totalStakeInSol:
type: number
totalStakeAccounts:
type: integer
activeStakeAccounts:
type: integer
delegatorCount:
type: integer
lastUpdated:
type: string
format: date-time
cacheSource:
type: string
enum:
- redis
- fresh
isStale:
type: boolean
required:
- delegators
- totalStake
- delegatorCount
- lastUpdated
Pagination:
type: object
properties:
page:
type: integer
limit:
type: integer
totalPages:
type: integer
totalCount:
type: integer
hasNext:
type: boolean
hasPrev:
type: boolean
ComputeUnitsData:
type: object
properties:
slot:
type: integer
computeUnitsConsumed:
type: integer
computeUnitsTotal:
type: integer
utilizationPercentage:
type: number
timestamp:
type: string
format: date-time
required:
- slot
- computeUnitsConsumed
- computeUnitsTotal
- utilizationPercentage
RewardEntry:
type: object
properties:
stakeAccount:
type: string
stakerAuthority:
type: string
validatorVoteAccount:
type: string
totalRewardsActual:
type: string
inflationRewards:
type: string
nullable: true
mevRewards:
type: string
nullable: true
mevAvailabilityStatus:
type: string
enum:
- available
- pending
dataCompleteness:
type: string
dataStatus:
type: object
properties:
balanceDataComplete:
type: boolean
inflationDataComplete:
type: boolean
mevDataComplete:
type: boolean
validation:
type: object
properties:
balanceMatchesRPC:
type: boolean
calculationAccuracy:
type: string
confidenceScore:
type: integer
dataFreshnessScore:
type: integer
activeStake:
type: string
delegatedStake:
type: string
activationEpoch:
type: integer
deactivationEpoch:
type: integer
nullable: true
calculationMethod:
type: string
enum:
- balance_difference
NetworkAPYData:
type: object
properties:
apy:
type: number
inflationAPY:
type: number
mevAPY:
type: number
averageCommission:
type: number
stakingRatio:
type: number
lastUpdated:
type: string
format: date-time
cacheSource:
type: string
enum:
- redis
- fresh
isStale:
type: boolean
required:
- apy
- inflationAPY
- mevAPY
- averageCommission
- stakingRatio
- lastUpdated
externalDocs:
description: Agent guide and integration entrypoints
url: https://parafi.tech/skill.md