Skip to main content

Centrifuge API

The Centrifuge API is a public, read-only GraphQL endpoint for querying onchain data from the Centrifuge protocol across multiple networks. Send any GraphQL-compliant POST request to https://api.centrifuge.io. No authentication required. For interactive exploration, open the GraphiQL UI and use Ctrl + Space to trigger autocomplete.

All queries accept these standard parameters:

ParameterTypeDescription
limitIntMax records to return (default 100, max 1000)
whereFilterEntity-specific filter criteria (see each section below)
orderByStringColumn to sort by (default: primary key)
orderDirectionString"asc" or "desc" (default: "asc")

Pools

A pool is the top-level entity that groups together share classes (tokens), vaults, and holdings across multiple networks. Each pool can issue several tokens, deploy vaults on different chains, and manage assets through a unified on-chain structure.

FilterTypeDescription
idBigIntPool ID
centrifugeIdStringCentrifuge-specific pool identifier
nameStringPool name (supports _contains, _starts_with)
isActiveBooleanWhether the pool is currently active
POSThttps://api.centrifuge.io
query GetActivePools {
pools(
where: { isActive: true, name_not: null }
limit: 5
) {
items {
id
name
centrifugeId
isActive
tokens {
items {
id
name
symbol
totalIssuance
tokenPrice
}
}
}
}
}

Tokens

A token (or share class) represents ownership in a pool. TVL per token can be calculated as totalIssuance * tokenPrice, adjusted for decimals.

FilterTypeDescription
idStringToken address
poolIdBigIntPool the token belongs to
nameStringToken name
symbolStringToken symbol
POSThttps://api.centrifuge.io
query GetTokenById {
tokens(
where: { id: "0x00010000000000060000000000000001" }
) {
items {
id
name
totalIssuance
tokenPrice
pool {
asset {
decimals
}
}
}
}
}

Vaults

A vault is the entry point for investors on a specific chain. Each vault connects a pool's share class token to a deposit asset on a spoke chain, handling deposits, redemptions, and token conversions for that particular network.

FilterTypeDescription
idStringVault contract address
centrifugeIdStringCentrifuge chain identifier
poolIdBigIntPool the vault belongs to
tokenIdStringShare class token ID
isActiveBooleanWhether the vault is currently active
assetAddressStringDeposit asset contract address
POSThttps://api.centrifuge.io
query GetVaultsByPool {
vaults(
where: { poolId: "281474976710659" }
limit: 10
) {
items {
id
centrifugeId
poolId
tokenId
assetAddress
isActive
status
blockchain {
centrifugeId
name
}
}
}
}

Holdings

Holding escrows track the custodial asset positions for each pool on spoke chains. Each escrow holds a specific asset amount and price, linked to the on-chain asset contract.

FilterTypeDescription
poolIdBigIntPool the escrow belongs to
centrifugeIdStringCentrifuge chain identifier
tokenIdStringShare class token ID
assetIdBigIntAsset identifier
assetAddressStringAsset contract address
POSThttps://api.centrifuge.io
query GetHoldingEscrowsByPool {
holdingEscrows(
where: { poolId: "281474976710659" }
limit: 5
) {
items {
centrifugeId
assetAmount
assetPrice
asset {
name
symbol
decimals
address
}
}
}
}

Investor transactions

Investor transactions record every invest, redeem, and claim action executed by investors in the protocol.

FilterTypeDescription
accountStringInvestor wallet address
centrifugeIdStringCentrifuge chain identifier
typeInvestorTransactionTypeTransaction type (e.g. DEPOSIT_REQUEST_UPDATED, REDEEM_CLAIMED, TRANSFER_IN)
poolIdBigIntPool ID
tokenIdStringShare class token ID
POSThttps://api.centrifuge.io
query GetTransactionsByInvestor {
investorTransactions(
where: {
account: "0xa2da14a5012b67c609e52f5e6f7372853c2eb5aa"
}
limit: 5
orderBy: "createdAt"
orderDirection: "desc"
) {
items {
txHash
centrifugeId
type
account
poolId
tokenId
currencyAmount
tokenAmount
tokenPrice
createdAt
blockchain {
centrifugeId
name
}
}
}
}

Investor positions

Token instance positions represent an investor's share class token balance on a specific chain. Query by account address to see all holdings across networks.

FilterTypeDescription
accountAddressStringInvestor wallet address
centrifugeIdStringCentrifuge chain identifier
tokenIdStringShare class token ID
isFrozenBooleanWhether the position is frozen
balanceBigIntToken balance (supports _gt, _lt)
POSThttps://api.centrifuge.io
query GetPositionsByInvestor {
tokenInstancePositions(
where: {
accountAddress: "0xeaafba6ae4f1c428546706d4b3b6a72fda4bac98"
balance_gt: "0"
}
) {
items {
tokenId
centrifugeId
accountAddress
balance
isFrozen
tokenInstance {
address
blockchain {
centrifugeId
name
}
}
}
}
}

Snapshots

Snapshots capture entity state at specific points in time. Available for pools, tokens, token instances, and holdings. All snapshots share common fields: timestamp, blockNumber, trigger, triggerTxHash, and triggerChainId.

EntityDescription
PoolSnapshotPool state at a point in time
TokenSnapshotToken details at a specific moment
TokenInstanceSnapshotToken instance status on a spoke chain
HoldingSnapshotPool asset positions across chains
HoldingEscrowSnapshotEscrow asset amounts and prices over time
POSThttps://api.centrifuge.io
{
tokenInstanceSnapshots(
orderBy: "timestamp"
orderDirection: "asc"
where: {
tokenId: "0x00010000000000060000000000000001"
trigger_starts_with: "ethereum"
}
) {
items {
tokenId
triggerChainId
trigger
timestamp
totalIssuance
tokenPrice
}
}
}

Other entities

Beyond the main entities above, the API exposes a full set of indexed resources:

Infrastructure

EntityDescription
BlockchainAll blockchains the indexer is currently tracking
DeploymentProtocol contracts and addresses deployed to a blockchain
PoolSpokeBlockchainMapping of pools to their spoke chain deployments

Protocol hub resources

EntityDescription
HoldingPool-level asset position with quantity and valuation
HoldingAccountCategorized asset account for a pool (asset, equity, liability, etc.)
AssetRegistrationSuccessful registration of an asset on a hub chain
OnOffRampManagerCross-chain asset movement for pools
OfframpRelayerAuthorized services that process withdrawal requests
OnRampAssetToken types investors can deposit for pool shares
OffRampAddressPre-approved withdrawal destinations
PolicyMerkle tree root representing allowed operations for a strategist
MerkleProofManagerEnables strategists to execute multi-call operations on behalf of pools

Protocol spoke resources

EntityDescription
AssetAn asset on a spoke chain
TokenInstanceInstance of a share class token on a spoke chain
EscrowCustodial wallet for pool assets on a spoke chain

Cross-chain communication

EntityDescription
CrosschainPayloadData content sent from one blockchain to another
CrosschainMessageStructured communication between blockchains
AdapterBridges that relay payloads between networks
AdapterWiringConfiguration linking adapter addresses across chains
AdapterParticipationTracks adapter involvement in cross-chain transfers

Transactional data

EntityDescription
OutstandingInvestPending invest order awaiting fulfillment
OutstandingRedeemPending redeem order awaiting fulfillment
PendingInvestOrderPending invest order with queued and pending amounts
PendingRedeemOrderPending redeem order with queued and pending amounts
InvestOrderApproved invest order (tracks approval to claim)
RedeemOrderApproved redeem order (tracks approval to claim)
VaultInvestOrderCross-chain invest order via a vault
VaultRedeemOrderCross-chain redeem order via a vault
EpochOutstandingInvestAggregated outstanding invest orders (epoch-level)
EpochOutstandingRedeemAggregated outstanding redeem orders (epoch-level)
EpochInvestOrderApproved invest order at epoch level
EpochRedeemOrderApproved redeem order at epoch level
TokenInstancePositionInvestor position holding a share class token

Actors and participants

EntityDescription
AccountUser-owned address (UOA) in the protocol
PoolManagerManager of a pool (hub or spoke)
WhitelistedInvestorInvestor allowed to invest in a pool

Filtering, sorting, and pagination

Filters

Use the where argument to filter records. Filter options are available for every column:

Filter suffixColumn typesMatches records where column...
(none)Allequals the value
_notAlldoes not equal the value
_inPrimitives, enumsis one of the values
_not_inPrimitives, enumsis not one of the values
_gt / _ltNumericis greater / less than the value
_gte / _lteNumericis greater/less than or equal to the value
_containsStringcontains the substring
_not_containsStringdoes not contain the substring
_starts_with / _ends_withStringstarts / ends with the substring
_not_starts_with / _not_ends_withStringdoes not start / end with the substring
_hasListshas the value as an element
_not_hasListsdoes not have the value as an element

Compose filters using the AND and OR operators, which accept an array of filter objects.

Sorting

Use orderBy and orderDirection to sort results:

ArgumentDefaultOptions
orderByPrimary keyAny column name
orderDirection"asc""asc" or "desc"

Pagination

The API uses cursor-based pagination. For details, see the Ponder.sh pagination docs.

Filter example

This query combines filtering, sorting, and pagination: it fetches token instance snapshots for a specific token, filtered to Ethereum triggers, sorted chronologically.

POSThttps://api.centrifuge.io
{
tokenInstanceSnapshots(
orderBy: "timestamp"
orderDirection: "asc"
where: {
tokenId: "0x00010000000000060000000000000001"
trigger_starts_with: "ethereum"
}
limit: 5
) {
items {
tokenId
trigger
timestamp
totalIssuance
tokenPrice
}
}
}

Limits and performance

LimitValue
Max page size1000 records per page
Request timeout30 seconds

Performance tips:

  1. Limit query depth: each nested level adds a sequential database query. Keep queries to 2 levels deep or fewer.
  2. Use pagination: fetch records in smaller chunks with cursor-based pagination to reduce database load.

Supported networks

See the Deployments page for the full list of supported networks and contract addresses.

Data freshness

Data is typically available within 1-2 minutes of onchain confirmation. Historical snapshots are maintained at daily intervals, with some entities also snapshotted on specific trigger events.


Token REST API

The API also exposes REST endpoints for simple token lookups. All endpoints return JSON responses.

Token price

Returns the current price of a token by its contract address, formatted as a decimal string.

GET /tokens/:address/price

Parameters

FieldDescription
addressToken contract address on any supported network

Response

StatusDescription
200Token price returned
404Token address not found, or price not set
GET

Token total issuance

Returns the total issuance (supply) of a token by its contract address, formatted as a decimal string adjusted for the token's decimals.

GET /tokens/:address/total-issuance

Parameters

FieldDescription
addressToken contract address on any supported network

Response

StatusDescription
200Total issuance returned
404Token address not found, decimals not set, or total issuance not set
GET