GraphQL API reference
Schema, queries and subscriptions for flexible access to protocol data.
Planned. The
api.noderr.xyzpublic REST/GraphQL/WebSocket API is not yet live. This page documents the planned interface. The live API ishttps://agent.noderr.xyz. See the Agent Protocol API Reference.
Endpoint
https://api.noderr.xyz/graphql
For testnet:
https://api-testnet.noderr.xyz/graphql
Schema
Types
type Vault {
address: String!
name: String!
symbol: String!
tvl: BigInt!
tvlUsd: Float!
totalShares: BigInt!
pricePerShare: BigInt!
apy: APY!
fees: Fees!
riskLevel: RiskLevel!
strategies: [Strategy!]!
isERC7540: Boolean!
fulfillmentDelay: Int
createdAt: DateTime!
}
type APY {
current: Float!
day7: Float!
day30: Float!
inception: Float!
}
type Fees {
management: Float!
performance: Float!
hurdle: Float!
}
type Strategy {
id: ID!
name: String!
status: StrategyStatus!
allocation: Float!
apy: Float!
riskScore: Int!
sharpeRatio: Float!
maxDrawdown: Float!
}
type UserPosition {
vault: Vault!
shares: BigInt!
value: BigInt!
pnl: BigInt!
pnlPercent: Float!
depositedAt: DateTime!
}
type Transaction {
hash: String!
type: TransactionType!
vault: Vault!
user: String!
amount: BigInt!
shares: BigInt
status: TransactionStatus!
timestamp: DateTime!
}
enum RiskLevel {
CONSERVATIVE
MODERATE
AGGRESSIVE
}
enum StrategyStatus {
EVOLUTION
SHADOW
LIVE
DEPRECATED
}
enum TransactionType {
DEPOSIT
WITHDRAW
DEPOSIT_REQUEST
REDEEM_REQUEST
CLAIM
}
enum TransactionStatus {
PENDING
FULFILLED
CLAIMED
FAILED
}
Queries
type Query {
# Vaults
vaults(
riskLevel: RiskLevel
minTvl: BigInt
orderBy: VaultOrderBy
): [Vault!]!
vault(address: String!): Vault
vaultHistory(
address: String!
period: Period!
interval: Interval!
): [VaultSnapshot!]!
# Strategies
strategies(
status: StrategyStatus
minSharpe: Float
): [Strategy!]!
strategy(id: ID!): Strategy
# User data
userPositions(address: String!): [UserPosition!]!
userTransactions(
address: String!
type: TransactionType
limit: Int
offset: Int
): [Transaction!]!
# Protocol
protocolStats: ProtocolStats!
# Nodes
nodeStats: NodeStats!
}
Example queries
Get all vaults with strategies
query GetVaults {
vaults(orderBy: TVL_DESC) {
address
name
symbol
tvlUsd
apy {
current
day30
}
riskLevel
strategies {
name
allocation
apy
}
}
}
Get user portfolio
query GetUserPortfolio($address: String!) {
userPositions(address: $address) {
vault {
name
symbol
apy {
current
}
}
shares
value
pnl
pnlPercent
}
}
Get vault with history
query GetVaultDetails($address: String!) {
vault(address: $address) {
name
tvlUsd
apy {
current
day7
day30
inception
}
fees {
management
performance
hurdle
}
isERC7540
fulfillmentDelay
}
vaultHistory(
address: $address
period: MONTH
interval: DAY
) {
timestamp
tvl
apy
pricePerShare
}
}
Subscriptions
Subscriptions push updates in real time:
subscription OnVaultUpdate($address: String!) {
vaultUpdated(address: $address) {
tvl
pricePerShare
apy {
current
}
}
}
subscription OnNewTransaction($vaultAddress: String) {
transactionCreated(vaultAddress: $vaultAddress) {
hash
type
amount
user
timestamp
}
}
Pagination
Large result sets use offset pagination, matching the userTransactions schema (limit/offset):
query GetTransactions($limit: Int, $offset: Int) {
userTransactions(
address: "0x..."
limit: $limit
offset: $offset
) {
hash
type
amount
}
}
Errors
Errors follow the standard GraphQL format:
{
"errors": [
{
"message": "Vault not found",
"locations": [{ "line": 2, "column": 3 }],
"path": ["vault"],
"extensions": {
"code": "NOT_FOUND"
}
}
]
}
Last updated: December 2025
results matching ""
No results matching ""