Skip to content

Developers

The read API

Every figure in Irogent comes from a public, read-only JSON API on this deployment. There is no key and no account. Each answer carries its sources, the block it was read at, what it covers, and anything that could not be read.

Base URL
https://irogent.xyz
Method
GET only
Format
JSON, UTF-8
Authentication
None
Rate limit
120 requests a minute per client

Conventions

  • An identity is named by chain, registry and agent id. Paths spell it out as /api/agents/{chainId}/{registry}/{agentId}; the canonical text form is eip155:4663:0x8004A169FB4a3325136EB29fA0ceB6D2e539a432:462. Only the verified ERC-8004 identity registry on Robinhood Chain (4663) is supported.
  • Amounts are Amount objects: base units as a decimal string plus decimals and symbol. Nothing is sent as a floating-point balance. USD values appear only next to a named price source.
  • Addresses are returned checksummed (EIP-55). Times are ISO 8601 in UTC. Block numbers are integers.
  • Unknown is not zero. A value that could not be read carries a status such as unavailable and a warning; it is never reported as 0.
  • Names, descriptions and images come from registration files that agents write themselves. They are passed through, labelled, and never used for figures.

The envelope

Every successful answer has the same outer shape. data is the payload described for each endpoint below; the other fields say where it came from and how complete it is.

TypeScript
interface Envelope<T> {
  data: T
  sources: SourceRef[]
  updatedAt: string                 // ISO time the answer was built
  indexedThroughBlock?: number | null
  coverage?: Coverage
  warnings: Warning[]
  pagination?: Pagination
}

interface SourceRef {
  id: string
  label: string
  url?: string
  block?: number                    // block the figure was read at, for chain reads
  at?: string                       // ISO time the figure was read or reported
}

interface Coverage {
  summary: string                   // what the data covers, and what it does not
  indexedThroughBlock?: number | null
  headBlock?: number | null
  partial: boolean
}

interface Warning { code: string; message: string }

interface Pagination {
  limit: number
  offset?: number
  nextCursor?: string | null
  total?: number | null
}

interface Amount {
  raw: string                       // base units as a decimal string, never a float
  decimals: number
  symbol: string
}

sources lists every upstream the answer used (RPC with block, indexer checkpoint, facilitator, explorer, price source). coverage.summary is a sentence about what is and is not included, and partial is true when part of it could not be read. warnings carry machine-readable codes such as not_indexed or prices_unavailable.

Errors

When nothing can be served, the answer is an error body instead of an envelope. Partial reads are never dressed up as success; they arrive as an envelope with warnings.

TypeScript
interface ApiErrorBody {
  error: { code: string; message: string; details?: unknown }
  updatedAt: string
}
CodeHTTPMeaning
bad_request400Malformed path or query. Validation problems are listed in error.details as { path, message }.
not_found404The identity does not exist in the registry.
unsupported422A chain or registry other than the verified ERC-8004 identity registry on chain 4663.
rate_limited429Too many requests from this client. A retry-after header is set.
internal500An unexpected error. Nothing partial is returned.
not_configured503The endpoint needs the indexed database, which this deployment does not have.
upstream_unavailable503The RPC, the indexer or the facilitator did not answer, and nothing could be served.
404 exampleGET /api/agents/4663/{registry}/999999
{
  "error": {
    "code": "not_found",
    "message": "No identity with this id exists in the registry."
  },
  "updatedAt": "2026-10-09T06:01:12.249Z"
}
422 exampleGET /api/agents/1/{registry}/1
{
  "error": {
    "code": "unsupported",
    "message": "Irogent reads the verified ERC-8004 identity registry on Robinhood Chain (eip155:4663:0x8004A169FB4a3325136EB29fA0ceB6D2e539a432); other registries and chains are not supported."
  },
  "updatedAt": "2026-10-09T06:01:12.349Z"
}

Caching

Successful answers are cacheable by shared caches for a few seconds and may be served stale while they revalidate: cache-control: public, s-maxage=N, stale-while-revalidate=4N, with N per endpoint below. Errors are sent with cache-control: no-store. Every successful answer also carries x-irogent-api: 1.

Endpoints-maxagestale-while-revalidate
/api/agents30s120s
/api/agents/{chainId}/{registry}/{agentId}20s80s
/api/agents/{chainId}/{registry}/{agentId}/credit15s60s
/api/agents/{chainId}/{registry}/{agentId}/activity20s80s
/api/agents/{chainId}/{registry}/{agentId}/payments20s80s
/api/address/{address}20s80s
/api/address/{address}/assets20s80s
/api/address/{address}/transfers30s120s
/api/payments20s80s
/api/search?q=10s40s
/api/status10s40s

Rate limits

Each client gets a token bucket of RATE_LIMIT_PER_MINUTE requests a minute (default 120), refilled continuously. The client is the first address in x-forwarded-for, else x-real-ip. Every route under /api costs one token.

Over the limit, the answer is 429 rate_limited with a retry-after: 10 header; the message names the seconds until a token is free. Buckets live in memory on each server instance, so a deployment with several instances enforces the limit per instance: treat it as a courtesy limit, not a quota.

429 exampleProduced by the API’s own error builder
{
  "error": {
    "code": "rate_limited",
    "message": "Too many requests; try again in 3s"
  },
  "updatedAt": "2026-10-09T08:45:56.479Z"
}

Endpoints

Examples use agent 462 in the verified identity registry and the wallet it declares. Responses shown are real answers from this API, trimmed where noted.

GET /api/agents

GET/api/agents

The indexed directory of ERC-8004 identities registered in the verified registry, newest first. Built from Registered events; the registry has no on-chain list.

Query parameters

qstring ≤ 80
Matches the name or description from each registration file, case-insensitive. Those fields are written by the agent and unverified.
sort'newest' | 'oldest' | 'id' · default newest
newest and oldest order by registration block; id orders by agent id.
hasWallet'1' | 'true'
Only identities that declare an agent wallet in the registry.
hasMetadata'1' | 'true'
Only identities whose registration file was fetched and parsed.
owneraddress
Identities owned by this address or declaring it as their agent wallet.
limitinteger 1–100 · default 25
Rows to return. Values outside the range are clamped.
offsetinteger 0–100000 · default 0
Rows to skip. pagination.total gives the matching count.
data
AgentListItem[]

interface AgentListItem {
  id: string                        // eip155:<chainId>:<registry>:<agentId>
  chainId: number
  registry: `0x${string}`
  agentId: string
  owner: `0x${string}`
  agentWallet: `0x${string}` | null
  name: string | null               // from the registration file, unverified
  image: string | null
  metadataStatus: 'ok' | 'pending' | 'unreachable' | 'blocked' | 'invalid' | 'too_large' | 'unsupported' | 'empty'
  registeredBlock: number
  registeredAt: string | null
  credit: { loansRepaid: number; activeLoans: number; defaulted: boolean } | null
}
Errors
400 bad_request · 503 not_configured (no database on this deployment) · 429 rate_limited · 500 internal
Cache
s-maxage=30, stale-while-revalidate=120
Request
curl -s "https://irogent.xyz/api/agents?limit=1"
ResponseLive response from this deployment, read 2026-10-09 08:45:56 UTC.
{
  "data": [
    {
      "id": "eip155:4663:0x8004A169FB4a3325136EB29fA0ceB6D2e539a432:8639",
      "chainId": 4663,
      "registry": "0x8004A169FB4a3325136EB29fA0ceB6D2e539a432",
      "agentId": "8639",
      "owner": "0x0e444828Be84b9B69c1A0aABeDceccfF71a8A9c3",
      "agentWallet": "0xFF3A5b80315e17A689eb6ad351b5f3FaA7E4993C",
      "name": "Adam",
      "image": null,
      "metadataStatus": "ok",
      "registeredBlock": 83800995,
      "registeredAt": "2026-10-09T02:18:58.000Z",
      "credit": {
        "loansRepaid": 0,
        "activeLoans": 1,
        "defaulted": false
      }
    }
  ],
  "sources": [
    {
      "id": "irogent-index",
      "label": "Irogent index (events read from the chain, stored in PostgreSQL)",
      "block": 84024931,
      "at": "2026-10-09T08:45:56.633Z"
    },
    {
      "id": "erc8004-contracts",
      "label": "ERC-8004 registry contracts and deployment table",
      "url": "https://github.com/erc-8004/erc-8004-contracts"
    }
  ],
  "updatedAt": "2026-10-09T08:45:56.633Z",
  "indexedThroughBlock": 84024931,
  "coverage": {
    "summary": "Identities registered in 0x8004A169FB4a3325136EB29fA0ceB6D2e539a432 through block 84024931. Registrations after that block are not listed yet.",
    "indexedThroughBlock": 84024931,
    "partial": false
  },
  "warnings": [],
  "pagination": {
    "limit": 1,
    "offset": 0,
    "total": 8640
  }
}

GET /api/agents/{chainId}/{registry}/{agentId}

GET/api/agents/{chainId}/{registry}/{agentId}

One identity: owner and declared agent wallet read live from the registry, the registration file (fetched with size and host limits), the roles of each address, and the address Irogent uses for financial figures with its reason.

Path parameters

chainIdinteger
Chain id. Only 4663 (Robinhood Chain) is supported.
registryaddress
Identity registry. Only the verified ERC-8004 registry 0x8004A169FB4a3325136EB29fA0ceB6D2e539a432 is supported; any letter case is accepted.
agentIddecimal string
The ERC-721 token id of the identity (ids start at 0).
data
{ identity: AgentIdentity; links: { profile: string; priors: string } }

interface AgentIdentity {
  id: string
  chainId: number
  registry: `0x${string}`
  agentId: string
  owner: `0x${string}`
  agentUri: string | null
  agentWallet: `0x${string}` | null
  name: string | null
  description: string | null
  image: string | null
  metadata: RegistrationFile | null // agent-controlled, unverified
  metadataStatus: MetadataStatus
  metadataFetchedAt: string | null
  metadataError: string | null
  registeredBlock: number | null
  registeredTx: string | null
  registeredAt: string | null
  roles: AddressRole[]              // identity_owner | agent_wallet | delegated | metadata_claim
  attribution: { address: `0x${string}`; relationship: WalletRelationship; reason: string } | null
  source: 'chain' | 'index' | 'index+chain'
  readAtBlock: number | null
}
Errors
400 bad_request · 404 not_found · 422 unsupported · 503 upstream_unavailable · 429 rate_limited · 500 internal
Cache
s-maxage=20, stale-while-revalidate=80
Request
curl -s "https://irogent.xyz/api/agents/4663/0x8004A169FB4a3325136EB29fA0ceB6D2e539a432/462"
ResponseLive response from this deployment, read 2026-10-09 08:45:56 UTC.
{
  "data": {
    "identity": {
      "id": "eip155:4663:0x8004A169FB4a3325136EB29fA0ceB6D2e539a432:462",
      "chainId": 4663,
      "registry": "0x8004A169FB4a3325136EB29fA0ceB6D2e539a432",
      "agentId": "462",
      "owner": "0xb240FbfADEdD77aB8300BEE42e4942CD18efB6Ca",
      "agentUri": "https://priors.trade/agents/atlas.json",
      "agentWallet": "0xb240FbfADEdD77aB8300BEE42e4942CD18efB6Ca",
      "name": "atlas",
      "description": "Agent #462 in the ERC-8004 identity registry on Robinhood Chain. Its Priors record (lines, loans and repayments) is public on chain; its page and the free check API show it.",
      "image": "https://priors.trade/logo.svg",
      "metadata": {
        "name": "atlas",
        "type": "https://eips.ethereum.org/EIPS/eip-8004#registration-v1",
        "image": "https://priors.trade/logo.svg",
        "services": [
          {
            "name": "web",
            "endpoint": "https://priors.trade/agent?id=462"
          },
          {
            "name": "check",
            "endpoint": "https://priors.trade/api/check?agent=462"
          }
        ],
        "otherKeys": [],
        "description": "Agent #462 in the ERC-8004 identity registry on Robinhood Chain. Its Priors record (lines, loans and repayments) is public on chain; its page and the free check API show it.",
        "registrations": [
          {
            "agentId": "462",
            "agentRegistry": "eip155:4663:0x8004A169FB4a3325136EB29fA0ceB6D2e539a432"
          }
        ],
        "supportedTrust": [
          "reputation"
        ]
      },
      "metadataStatus": "ok",
      "metadataFetchedAt": "2026-10-09T07:12:53.822Z",
      "metadataError": null,
      "registeredBlock": 68691805,
      "registeredTx": "0xce050ca15f89d674207fb43b2e4b232107e49e03612be35ba4b408f1af5e23ec",
      "registeredAt": "2026-09-21T09:32:15.000Z",
      "roles": [
        {
          "address": "0xb240FbfADEdD77aB8300BEE42e4942CD18efB6Ca",
          "relationship": "identity_owner",
          "source": "registry_ownerOf",
          "verified": true,
          "note": "Holds the identity NFT."
        },
        {
          "address": "0xb240FbfADEdD77aB8300BEE42e4942CD18efB6Ca",
          "relationship": "agent_wallet",
          "source": "registry_getAgentWallet",
          "verified": true,
          "note": "Declared agent wallet; the same address as the owner."
        }
      ],
      "attribution": {
        "address": "0xb240FbfADEdD77aB8300BEE42e4942CD18efB6Ca",
        "relationship": "agent_wallet",
        "reason": "The identity declares this agent wallet in the registry (setAgentWallet, signed by the wallet). Figures below are this address’s, not the owner’s."
      },
      "source": "index+chain",
      "readAtBlock": 84025861
    },
    "links": {
      "profile": "/app/agents/4663/0x8004A169FB4a3325136EB29fA0ceB6D2e539a432/462",
      "priors": "https://priors.trade/agent?id=462"
    }
  },
  "sources": [
    {
      "id": "rpc",
      "label": "Robinhood Chain JSON-RPC (chain 4663)",
      "url": "https://rpc.mainnet.chain.robinhood.com",
      "block": 84025861,
      "at": "2026-10-09T08:45:56.732Z"
    },
    {
      "id": "irogent-index",
      "label": "Irogent index (events read from the chain, stored in PostgreSQL)",
      "block": 84024931,
      "at": "2026-10-09T08:45:56.732Z"
    },
    {
      "id": "erc8004-spec",
      "label": "ERC-8004 specification",
      "url": "https://ercs.ethereum.org/ERCS/erc-8004"
    },
    {
      "id": "sourcify-identity",
      "label": "Sourcify record: identity registry",
      "url": "https://sourcify.dev/server/v2/contract/4663/0x8004A169FB4a3325136EB29fA0ceB6D2e539a432"
    }
  ],
  "updatedAt": "2026-10-09T08:45:56.732Z",
  "indexedThroughBlock": 84024931,
  "coverage": {
    "summary": "Owner, URI and agent wallet are live registry reads; registration block and event history come from the index. The registration file is agent-controlled and unverified.",
    "indexedThroughBlock": 84024931,
    "partial": false
  },
  "warnings": []
}

GET /api/agents/{chainId}/{registry}/{agentId}/credit

GET/api/agents/{chainId}/{registry}/{agentId}/credit

The Priors credit line read live from pool v2 and its lens (capacity, available, principal outstanding, open loans with due dates), loan history indexed from the v1 and v2 pools, the published Score v2 from the check API and the on-chain score attestation. A failed pool read answers status: "unavailable", never zero debt; no_record is returned only after a successful read.

Path parameters

chainIdinteger
Chain id. Only 4663 (Robinhood Chain) is supported.
registryaddress
Identity registry. Only the verified ERC-8004 registry 0x8004A169FB4a3325136EB29fA0ceB6D2e539a432 is supported; any letter case is accepted.
agentIddecimal string
The ERC-721 token id of the identity (ids start at 0).
data
{ credit: CreditView; summary: string }

type CreditView =
  | { status: 'ok'; line: CreditLineState; openLoans: Loan[]; history: Loan[]; historySource: 'index' | 'chain' | 'none'; checkApi: PriorsCheck | null; attestation: PriorsAttestation | null }
  | { status: 'no_record'; readAtBlock: number; checkApi: PriorsCheck | null; attestation: PriorsAttestation | null; history: Loan[]; historySource: 'index' | 'chain' | 'none' }
  | { status: 'unavailable'; reason: string }
  | { status: 'unsupported'; reason: string }
Errors
400 bad_request. Read failures are reported inside data.credit, not as HTTP errors. · 429 rate_limited · 500 internal
Cache
s-maxage=15, stale-while-revalidate=60
Request
curl -s "https://irogent.xyz/api/agents/4663/0x8004A169FB4a3325136EB29fA0ceB6D2e539a432/462/credit"
ResponseLive response from this deployment, read 2026-10-09 08:45:58 UTC. History trimmed to one loan (364 more).
{
  "data": {
    "credit": {
      "status": "ok",
      "line": {
        "provider": "priors",
        "pool": "0x281210097f0de7A8FB6F87310AF0f089c9C8DE21",
        "enrolled": true,
        "isRoot": false,
        "defaulted": false,
        "frozen": false,
        "sponsorId": "6234",
        "capacity": {
          "raw": "5000000",
          "decimals": 6,
          "symbol": "USDG"
        },
        "available": {
          "raw": "0",
          "decimals": 6,
          "symbol": "USDG"
        },
        "principalOutstanding": {
          "raw": "5000000",
          "decimals": 6,
          "symbol": "USDG"
        },
        "activeLoans": 1,
        "loansRepaid": 364,
        "volumeRepaid": {
          "raw": "2478900000",
          "decimals": 6,
          "symbol": "USDG"
        },
        "feesPaid": {
          "raw": "2874173",
          "decimals": 6,
          "symbol": "USDG"
        },
        "enrolledAt": "2026-09-21T09:32:18.000Z",
        "lastBorrowAt": "2026-10-09T07:30:04.000Z",
        "lastRepayAt": "2026-10-09T07:30:03.000Z",
        "onchainScore": 44,
        "readAtBlock": 84025861
      },
      "openLoans": [
        {
          "pool": "0x281210097f0de7A8FB6F87310AF0f089c9C8DE21",
          "poolVersion": "v2",
          "loanId": "27440",
          "agentId": "462",
          "sponsorId": "6234",
          "principal": {
            "raw": "5000000",
            "decimals": 6,
            "symbol": "USDG"
          },
          "fee": {
            "raw": "6666",
            "decimals": 6,
            "symbol": "USDG"
          },
          "issuedAt": "2026-10-09T07:30:04.000Z",
          "dueAt": "2026-10-13T07:30:04.000Z",
          "closedAt": null,
          "status": "active",
          "openedTx": "0x84884efe7b26bfb6a5eaafc9a8070c41b4a548e65b6555f5b42ef049f51a5f89",
          "closedTx": null,
          "payer": null,
          "source": "chain"
        }
      ],
      "history": [
        {
          "pool": "0x281210097f0de7A8FB6F87310AF0f089c9C8DE21",
          "poolVersion": "v2",
          "loanId": "27440",
          "agentId": "462",
          "sponsorId": "6234",
          "principal": {
            "raw": "5000000",
            "decimals": 6,
            "symbol": "USDG"
          },
          "fee": {
            "raw": "6666",
            "decimals": 6,
            "symbol": "USDG"
          },
          "issuedAt": "2026-10-09T07:30:04.000Z",
          "dueAt": "2026-10-13T07:30:04.000Z",
          "closedAt": null,
          "status": "active",
          "openedTx": "0x84884efe7b26bfb6a5eaafc9a8070c41b4a548e65b6555f5b42ef049f51a5f89",
          "closedTx": null,
          "payer": null,
          "source": "index"
        }
      ],
      "historySource": "index",
      "checkApi": {
        "verdict": "repaid",
        "record": {
          "loansRepaid": 364,
          "volumeRepaidUsdg": 2478.9,
          "activeLoans": 1,
          "defaulted": false,
          "frozen": false,
          "isRoot": false,
          "enrolledAt": 1789983138,
          "lastRepayAt": 1791531003,
          "onchainScore": 44
        },
        "scoreV2": {
          "score": 17,
          "rung": 0,
          "rungName": "unproven",
          "version": "2.0.1",
          "updatedAt": 1791535229,
          "lateRepayments": 0
        },
        "block": 84024183,
        "fetchedAt": "2026-10-09T08:45:56.703Z",
        "url": "https://priors.trade/api/check?agent=462"
      },
      "attestation": {
        "count": 1,
        "score": 14,
        "readAtBlock": 84018124,
        "attester": "0x613854463BB854225306b9b18bdb451A78430a73"
      }
    },
    "summary": "This profile has 1 recorded active loan, 364 repayments counted by the pool, 364 indexed repayments in Irogent’s history. Principal outstanding is 5 USDG against a line of 5 USDG."
  },
  "sources": [
    {
      "id": "irogent-index",
      "label": "Irogent index (events read from the chain, stored in PostgreSQL)",
      "block": 84024951,
      "at": "2026-10-09T08:45:56.617Z"
    },
    {
      "id": "priors-check-api",
      "label": "Priors check API documentation",
      "url": "https://priors.trade/api/check?agent=462",
      "block": 84024183,
      "at": "2026-10-09T08:45:56.703Z"
    },
    {
      "id": "rpc",
      "label": "Robinhood Chain JSON-RPC (chain 4663)",
      "url": "https://rpc.mainnet.chain.robinhood.com",
      "block": 84018124,
      "at": "2026-10-09T08:45:57.119Z"
    },
    {
      "id": "rpc",
      "label": "Robinhood Chain JSON-RPC (chain 4663)",
      "url": "https://rpc.mainnet.chain.robinhood.com",
      "block": 84025861,
      "at": "2026-10-09T08:45:57.119Z"
    },
    {
      "id": "priors-repo",
      "label": "Priors repository (contracts, deployment record, SDK)",
      "url": "https://github.com/priors-agents/priors"
    },
    {
      "id": "priors-deployments",
      "label": "Priors deployment record for chain 4663",
      "url": "https://github.com/priors-agents/priors/blob/main/deployments/4663.v2.json"
    }
  ],
  "updatedAt": "2026-10-09T08:45:58.863Z",
  "indexedThroughBlock": 84024951,
  "coverage": {
    "summary": "Current line, outstanding principal and open loans are read from the Priors v2 pool at the stated block. Loan history is indexed from Borrowed/Repaid/Defaulted events of the v1 and v2 pools. Credit from other lenders is not covered.",
    "indexedThroughBlock": 84024951,
    "partial": false
  },
  "warnings": []
}

GET /api/agents/{chainId}/{registry}/{agentId}/activity

GET/api/agents/{chainId}/{registry}/{agentId}/activity

Registrations, URI and wallet changes, Priors loan events, attestations, facilitator settlements and USDG transfers of the attribution address, newest first. Every item names its transaction. Plain ETH transfers and other tokens are not included.

Path parameters

chainIdinteger
Chain id. Only 4663 (Robinhood Chain) is supported.
registryaddress
Identity registry. Only the verified ERC-8004 registry 0x8004A169FB4a3325136EB29fA0ceB6D2e539a432 is supported; any letter case is accepted.
agentIddecimal string
The ERC-721 token id of the identity (ids start at 0).

Query parameters

limitinteger 1–300 · default 100
Rows to return. Values outside the range are clamped.
data
{ items: ActivityItem[]; attribution: Attribution | null }

interface ActivityItem {
  kind: 'registered' | 'uri_updated' | 'metadata_set' | 'wallet_set' | 'wallet_unset' | 'identity_transfer'
      | 'borrowed' | 'repaid' | 'defaulted' | 'vouched' | 'released' | 'frozen'
      | 'transfer_in' | 'transfer_out' | 'settlement' | 'attestation'
  title: string
  detail: string | null
  amount: Amount | null
  txHash: string
  logIndex: number | null
  block: number | null
  timestamp: string | null
  counterparty: `0x${string}` | null
  source: SourceRef
}
Errors
400 bad_request · 404 not_found · 422 unsupported · 503 upstream_unavailable · 429 rate_limited · 500 internal
Cache
s-maxage=20, stale-while-revalidate=80
Request
curl -s "https://irogent.xyz/api/agents/4663/0x8004A169FB4a3325136EB29fA0ceB6D2e539a432/462/activity?limit=3"
ResponseLive response from this deployment, read 2026-10-09 08:46:03 UTC. Items trimmed to two (1 more).
{
  "data": {
    "items": [
      {
        "kind": "transfer_out",
        "title": "USDG sent",
        "detail": null,
        "amount": {
          "raw": "1000000",
          "decimals": 6,
          "symbol": "USDG"
        },
        "txHash": "0x17e1462e8bb2c980b76916a774605c6f36cdcd4b816b4f261f308d42a21a1f6c",
        "logIndex": 3,
        "block": 84014877,
        "timestamp": "2026-10-09T08:27:11.000000Z",
        "counterparty": "0xA399444771Eb26412409ed6dd9215e8214E63960",
        "source": {
          "id": "blockscout",
          "label": "USDG transfer (Blockscout, verified on-chain receipt)",
          "url": "https://robinhoodchain.blockscout.com/tx/0x17e1462e8bb2c980b76916a774605c6f36cdcd4b816b4f261f308d42a21a1f6c",
          "block": 84014877
        }
      },
      {
        "kind": "borrowed",
        "title": "Loan drawn from the Priors pool",
        "detail": "Loan #27440 · v2 pool · fee 0.0067 USDG",
        "amount": {
          "raw": "5000000",
          "decimals": 6,
          "symbol": "USDG"
        },
        "txHash": "0x84884efe7b26bfb6a5eaafc9a8070c41b4a548e65b6555f5b42ef049f51a5f89",
        "logIndex": 2,
        "block": 83981610,
        "timestamp": "2026-10-09T07:30:04.000Z",
        "counterparty": "0xb240FbfADEdD77aB8300BEE42e4942CD18efB6Ca",
        "source": {
          "id": "irogent-index",
          "label": "Priors pool event",
          "url": "https://robinhoodchain.blockscout.com/tx/0x84884efe7b26bfb6a5eaafc9a8070c41b4a548e65b6555f5b42ef049f51a5f89",
          "block": 83981610
        }
      }
    ],
    "attribution": {
      "address": "0xb240FbfADEdD77aB8300BEE42e4942CD18efB6Ca",
      "relationship": "agent_wallet",
      "reason": "The identity declares this agent wallet in the registry (setAgentWallet, signed by the wallet). Figures below are this address’s, not the owner’s."
    }
  },
  "sources": [
    {
      "id": "irogent-index",
      "label": "Irogent index (events read from the chain, stored in PostgreSQL)",
      "block": 84024931,
      "at": "2026-10-09T08:45:56.745Z"
    },
    {
      "id": "blockscout",
      "label": "Robinhood Chain Blockscout explorer",
      "url": "https://robinhoodchain.blockscout.com",
      "at": "2026-10-09T08:46:03.083Z"
    }
  ],
  "updatedAt": "2026-10-09T08:46:03.084Z",
  "indexedThroughBlock": 84024931,
  "coverage": {
    "summary": "Registry, pool and attestation events indexed through block 84024931. USDG transfers for 0xb240…B6Ca come from the Blockscout indexer (newest 100). Other tokens and plain ETH transfers are not included.",
    "indexedThroughBlock": 84024931,
    "partial": false
  },
  "warnings": [],
  "pagination": {
    "limit": 3
  }
}

GET /api/agents/{chainId}/{registry}/{agentId}/payments

GET/api/agents/{chainId}/{registry}/{agentId}/payments

Facilitator settlements naming the identity’s attribution address as payer or recipient, each with its on-chain reconciliation status.

Path parameters

chainIdinteger
Chain id. Only 4663 (Robinhood Chain) is supported.
registryaddress
Identity registry. Only the verified ERC-8004 registry 0x8004A169FB4a3325136EB29fA0ceB6D2e539a432 is supported; any letter case is accepted.
agentIddecimal string
The ERC-721 token id of the identity (ids start at 0).

Query parameters

limitinteger 1–100 · default 50
Rows to return. Values outside the range are clamped.
data
{ records: PaymentRecord[]; attribution: Attribution; summary: string; source: 'index' | 'live' }
Errors
400 bad_request · 404 not_found · 422 unsupported · 503 upstream_unavailable · 429 rate_limited · 500 internal
Cache
s-maxage=20, stale-while-revalidate=80
Request
curl -s "https://irogent.xyz/api/agents/4663/0x8004A169FB4a3325136EB29fA0ceB6D2e539a432/462/payments?limit=2"
ResponseLive response from this deployment, read 2026-10-09 08:45:56 UTC. This identity has no settlements in the facilitator feed.
{
  "data": {
    "records": [],
    "attribution": {
      "address": "0xb240FbfADEdD77aB8300BEE42e4942CD18efB6Ca",
      "relationship": "agent_wallet",
      "reason": "The identity declares this agent wallet in the registry (setAgentWallet, signed by the wallet). Figures below are this address’s, not the owner’s."
    },
    "summary": "No provider-reported x402 settlements name this address.",
    "source": "index"
  },
  "sources": [
    {
      "id": "facilitator",
      "label": "Priors facilitator",
      "url": "https://facilitator.priors.trade/supported"
    },
    {
      "id": "irogent-index",
      "label": "Irogent index: settlements reconciled with on-chain receipts",
      "block": 84025018
    }
  ],
  "updatedAt": "2026-10-09T08:45:56.737Z",
  "indexedThroughBlock": 84025018,
  "coverage": {
    "summary": "Every settlement the Priors facilitator publishes (157 rows, 157 confirmed against receipts, 0 mismatched). Settlements by other facilitators and plain USDG transfers are not in this list.",
    "indexedThroughBlock": 84025018,
    "partial": false
  },
  "warnings": [],
  "pagination": {
    "limit": 2,
    "nextCursor": null,
    "total": null
  }
}

GET /api/address/{address}

GET/api/address/{address}

A wallet: whether it is a contract, the indexed identities it owns or is declared wallet of, and identities the Priors check API matches to it. A wallet without identities is shown as a wallet, not an agent.

Path parameters

addressaddress
Any 0x address; answers use the checksummed form.
data
{
  address: `0x${string}`
  isContract: boolean | null        // null when the code read failed
  identities: AgentListItem[]
  identitiesStatus: 'ok' | 'not_configured' | 'unavailable'
  priorsMatches: { id: string; agentId: string; name: string | null; matchedAs: string[]; verdict: string }[]
  explorer: string
  note: string
}
Errors
400 bad_request · 429 rate_limited · 500 internal
Cache
s-maxage=20, stale-while-revalidate=80
Request
curl -s "https://irogent.xyz/api/address/0xb240FbfADEdD77aB8300BEE42e4942CD18efB6Ca"
ResponseLive response from this deployment, read 2026-10-09 08:45:56 UTC. The address is the declared wallet of agent 462.
{
  "data": {
    "address": "0xb240FbfADEdD77aB8300BEE42e4942CD18efB6Ca",
    "isContract": false,
    "identities": [
      {
        "id": "eip155:4663:0x8004A169FB4a3325136EB29fA0ceB6D2e539a432:462",
        "chainId": 4663,
        "registry": "0x8004A169FB4a3325136EB29fA0ceB6D2e539a432",
        "agentId": "462",
        "owner": "0xb240FbfADEdD77aB8300BEE42e4942CD18efB6Ca",
        "agentWallet": "0xb240FbfADEdD77aB8300BEE42e4942CD18efB6Ca",
        "name": "atlas",
        "image": "https://priors.trade/logo.svg",
        "metadataStatus": "ok",
        "registeredBlock": 68691805,
        "registeredAt": "2026-09-21T09:32:15.000Z",
        "credit": {
          "loansRepaid": 364,
          "activeLoans": 1,
          "defaulted": false
        }
      }
    ],
    "identitiesStatus": "ok",
    "priorsMatches": [
      {
        "id": "eip155:4663:0x8004A169FB4a3325136EB29fA0ceB6D2e539a432:462",
        "agentId": "462",
        "name": "atlas",
        "matchedAs": [
          "owner",
          "declared wallet"
        ],
        "verdict": "repaid"
      }
    ],
    "explorer": "https://robinhoodchain.blockscout.com/address/0xb240FbfADEdD77aB8300BEE42e4942CD18efB6Ca",
    "note": "Identities listed here own this address or declare it as their agent wallet. Figures on this page belong to the address, not to any one identity."
  },
  "sources": [
    {
      "id": "rpc",
      "label": "Robinhood Chain JSON-RPC (chain 4663)",
      "url": "https://rpc.mainnet.chain.robinhood.com",
      "at": "2026-10-09T08:45:56.763Z"
    },
    {
      "id": "irogent-index",
      "label": "Irogent index (events read from the chain, stored in PostgreSQL)",
      "block": 84024931,
      "at": "2026-10-09T08:45:56.763Z"
    },
    {
      "id": "priors-check-api",
      "label": "Priors check API documentation",
      "url": "https://github.com/priors-agents/priors/blob/main/docs/CHECK-API.md"
    }
  ],
  "updatedAt": "2026-10-09T08:45:56.763Z",
  "indexedThroughBlock": 84024931,
  "coverage": {
    "summary": "Identity ownership and declared wallets indexed through block 84024931.",
    "indexedThroughBlock": 84024931,
    "partial": false
  },
  "warnings": []
}

GET /api/address/{address}/assets

GET/api/address/{address}/assets

ETH and USDG read on-chain at a pinned block; other ERC-20 holdings listed by the Blockscout indexer and re-read on-chain (up to 40 tokens); prices from DefiLlama when available. supportedUsdTotal sums only priced holdings; an unpriced token is a quantity, not a value.

Path parameters

addressaddress
Any 0x address.
data
{ assets: AssetsView; summary: string }

interface AssetsView {
  address: `0x${string}`
  native: Holding | null
  usdg: Holding | null
  tokens: Holding[]
  status: { native: ReadStatus; usdg: ReadStatus; tokens: ReadStatus; prices: ReadStatus }
  coverage: string
  supportedUsdTotal: string | null
}

interface Holding {
  token: `0x${string}` | 'native'
  symbol: string
  name: string
  decimals: number
  amount: Amount
  verified: boolean                 // in Irogent's known list (USDG)
  readFrom: 'rpc' | 'blockscout' | 'rpc+blockscout'
  readAtBlock: number | null
  price: { usd: string; source: string; at: string; confidence?: number } | null
  usdValue: string | null
  reputation?: string | null
}
Errors
400 bad_request · 503 upstream_unavailable (neither the RPC nor the indexer answered) · 429 rate_limited · 500 internal
Cache
s-maxage=20, stale-while-revalidate=80
Request
curl -s "https://irogent.xyz/api/address/0xb240FbfADEdD77aB8300BEE42e4942CD18efB6Ca/assets"
ResponseCaptured from this API on 2026-10-09 (UTC). Blocks, balances and times move with the chain. tokens trimmed (14 entries for this wallet). Live read unavailable at render time; captured snapshot shown.
{
  "data": {
    "assets": {
      "address": "0xb240FbfADEdD77aB8300BEE42e4942CD18efB6Ca",
      "native": {
        "token": "native",
        "symbol": "ETH",
        "name": "Ether",
        "decimals": 18,
        "amount": {
          "raw": "36081856424348097",
          "decimals": 18,
          "symbol": "ETH"
        },
        "verified": true,
        "readFrom": "rpc",
        "readAtBlock": 83929543,
        "price": null,
        "usdValue": null
      },
      "usdg": {
        "token": "0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168",
        "symbol": "USDG",
        "name": "Global Dollar",
        "decimals": 6,
        "amount": {
          "raw": "21695689",
          "decimals": 6,
          "symbol": "USDG"
        },
        "verified": true,
        "readFrom": "rpc",
        "readAtBlock": 83929543,
        "price": {
          "usd": "0.99984121",
          "source": "DefiLlama coins API",
          "at": "2026-10-09T05:36:57.000Z",
          "confidence": 0.99
        },
        "usdValue": "21.69224394154369"
      },
      "tokens": [],
      "status": {
        "native": "ok",
        "usdg": "ok",
        "tokens": "ok",
        "prices": "ok"
      },
      "coverage": "ETH and USDG are read on-chain at the stated block. Other ERC-20 holdings come from the Blockscout indexer and were re-read on-chain (up to 40 tokens). NFTs, LP positions and tokens the indexer does not track are not included.",
      "supportedUsdTotal": "21.69"
    },
    "summary": "This address holds 21.7 USDG, 0.03608 ETH for gas, 14 other indexed tokens."
  },
  "sources": [
    {
      "id": "rpc",
      "label": "Robinhood Chain JSON-RPC (chain 4663)",
      "url": "https://rpc.mainnet.chain.robinhood.com",
      "block": 83929543,
      "at": "2026-10-09T06:01:10.098Z"
    },
    {
      "id": "blockscout",
      "label": "Robinhood Chain Blockscout explorer",
      "url": "https://robinhoodchain.blockscout.com"
    },
    {
      "id": "defillama",
      "label": "DefiLlama coins API (prices)",
      "url": "https://coins.llama.fi"
    },
    {
      "id": "sourcify-usdg",
      "label": "Sourcify record: USDG",
      "url": "https://sourcify.dev/server/v2/contract/4663/0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168"
    }
  ],
  "updatedAt": "2026-10-09T06:01:10.098Z",
  "indexedThroughBlock": null,
  "coverage": {
    "summary": "ETH and USDG are read on-chain at the stated block. Other ERC-20 holdings come from the Blockscout indexer and were re-read on-chain (up to 40 tokens). NFTs, LP positions and tokens the indexer does not track are not included.",
    "partial": false
  },
  "warnings": []
}

GET /api/address/{address}/transfers

GET/api/address/{address}/transfers

The newest USDG transfers naming the address (Blockscout, up to 100). For the newest 40 the receipt is checked: ownership says whether the address signed the transaction (self), authorized it with EIP-3009 (authorized), or was only named (observed).

Path parameters

addressaddress
Any 0x address.
data
{ address: `0x${string}`; transfers: TransferRecord[]; source: 'blockscout' | 'index' | 'blockscout+index' }

interface TransferRecord {
  txHash: string
  logIndex: number | null
  block: number
  timestamp: string | null
  from: `0x${string}`
  to: `0x${string}`
  token: `0x${string}`
  value: Amount
  ownership: 'self' | 'authorized' | 'observed' | 'unknown'
  authorizationUsed: boolean | null
  txFrom: `0x${string}` | null
}
Errors
400 bad_request · 503 upstream_unavailable · 429 rate_limited · 500 internal
Cache
s-maxage=30, stale-while-revalidate=120
Request
curl -s "https://irogent.xyz/api/address/0xb240FbfADEdD77aB8300BEE42e4942CD18efB6Ca/transfers"
ResponseLive response from this deployment, read 2026-10-09 08:46:03 UTC. Transfers trimmed to one (99 more).
{
  "data": {
    "address": "0xb240FbfADEdD77aB8300BEE42e4942CD18efB6Ca",
    "transfers": [
      {
        "txHash": "0x17e1462e8bb2c980b76916a774605c6f36cdcd4b816b4f261f308d42a21a1f6c",
        "logIndex": 3,
        "block": 84014877,
        "timestamp": "2026-10-09T08:27:11.000000Z",
        "from": "0xb240FbfADEdD77aB8300BEE42e4942CD18efB6Ca",
        "to": "0xA399444771Eb26412409ed6dd9215e8214E63960",
        "token": "0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168",
        "value": {
          "raw": "1000000",
          "decimals": 6,
          "symbol": "USDG"
        },
        "ownership": "self",
        "authorizationUsed": false,
        "txFrom": "0xb240FbfADEdD77aB8300BEE42e4942CD18efB6Ca"
      }
    ],
    "source": "blockscout"
  },
  "sources": [
    {
      "id": "blockscout",
      "label": "Robinhood Chain Blockscout explorer",
      "url": "https://robinhoodchain.blockscout.com"
    },
    {
      "id": "rpc",
      "label": "Robinhood Chain JSON-RPC (chain 4663)",
      "url": "https://rpc.mainnet.chain.robinhood.com",
      "at": "2026-10-09T08:46:03.082Z"
    }
  ],
  "updatedAt": "2026-10-09T08:46:03.082Z",
  "indexedThroughBlock": null,
  "coverage": {
    "summary": "Newest USDG transfers listed by the Blockscout indexer (up to 100), signer attribution from receipts for the newest 40. A transfer naming this address is not proof the address acted: only \"self\" and \"signed authorization\" rows were signed by it.",
    "partial": false
  },
  "warnings": []
}

GET /api/payments

GET/api/payments

x402 settlements reported by the Priors facilitator, newest first. With the indexed database each row is reconciled with its receipt; without it, rows are read live and stay provider-reported.

Query parameters

addressaddress
Rows where the address is payer or recipient.
payeraddress
Rows paid by the address.
payToaddress
Rows paid to the address.
status'unchecked' | 'confirmed' | 'mismatch' | 'not_found' | 'failed'
On-chain reconciliation status.
beforepositive integer
Cursor: the facilitator settlement id to page below. Use pagination.nextCursor.
limitinteger 1–100 · default 50
Rows to return. Values outside the range are clamped.
data
{ records: PaymentRecord[]; stats: Stats | null; source: 'index' | 'live'; summary: string }

interface PaymentRecord {
  key: string
  category: 'confirmed_transfer' | 'provider_reported_x402' | 'onchain_confirmed_x402'
  provider: 'priors-facilitator' | null
  providerId: string | null
  chainId: number
  txHash: string
  logIndex: number | null
  block: number | null
  payer: `0x${string}`
  recipient: `0x${string}`
  asset: Amount
  assetAddress: `0x${string}`
  timestamp: string | null
  reportedAt: string | null
  onchainStatus: 'unchecked' | 'confirmed' | 'mismatch' | 'not_found' | 'failed'
  authorizationUsed: boolean | null // EIP-3009 AuthorizationUsed seen beside the transfer
  submitter: `0x${string}` | null
  x402Version: number | null
  network: string | null
  requestContext: null              // the facilitator feed does not publish it
  sources: SourceRef[]
}

interface Stats { total: number; confirmed: number; reported: number; mismatch: number; payers: number; recipients: number }
Errors
400 bad_request · 503 upstream_unavailable (facilitator down and nothing indexed) · 429 rate_limited · 500 internal
Cache
s-maxage=20, stale-while-revalidate=80
Request
curl -s "https://irogent.xyz/api/payments?limit=1"
ResponseLive response from this deployment, read 2026-10-09 08:45:56 UTC.
{
  "data": {
    "records": [
      {
        "key": "0x9a319fce5bd60d3b4a7fd2de5fe1bed3fab1824563f01ccd63e2dca6bc603b10:1",
        "category": "onchain_confirmed_x402",
        "provider": "priors-facilitator",
        "providerId": "157",
        "chainId": 4663,
        "txHash": "0x9a319fce5bd60d3b4a7fd2de5fe1bed3fab1824563f01ccd63e2dca6bc603b10",
        "logIndex": 1,
        "block": 83976901,
        "payer": "0x4c3B0D819D0DC05364D173f4812644dcf50e9AF6",
        "recipient": "0x949206e4aF666C9FA5BfD527c7822358dB648Cf8",
        "asset": {
          "raw": "30000",
          "decimals": 6,
          "symbol": "USDG"
        },
        "assetAddress": "0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168",
        "timestamp": "2026-10-09T07:21:52.362Z",
        "reportedAt": "2026-10-09T07:21:52.362Z",
        "onchainStatus": "confirmed",
        "authorizationUsed": true,
        "submitter": "0x81da8C0a62B9eb84308dfB90108B59a018632319",
        "x402Version": 2,
        "network": "eip155:4663",
        "requestContext": null,
        "sources": [
          {
            "id": "facilitator",
            "label": "Priors facilitator",
            "url": "https://facilitator.priors.trade/supported",
            "at": "2026-10-09T07:21:52.362Z"
          },
          {
            "id": "explorer-tx",
            "label": "Transaction on Blockscout",
            "url": "https://robinhoodchain.blockscout.com/tx/0x9a319fce5bd60d3b4a7fd2de5fe1bed3fab1824563f01ccd63e2dca6bc603b10",
            "block": 83976901
          }
        ]
      }
    ],
    "stats": {
      "total": 157,
      "confirmed": 157,
      "reported": 0,
      "mismatch": 0,
      "payers": 22,
      "recipients": 22
    },
    "source": "index",
    "summary": "1 x402 settlement is recorded: 1 confirmed on-chain, 0 provider-reported only. A settled payment does not prove the paid request was fulfilled."
  },
  "sources": [
    {
      "id": "facilitator",
      "label": "Priors facilitator",
      "url": "https://facilitator.priors.trade/supported"
    },
    {
      "id": "irogent-index",
      "label": "Irogent index: settlements reconciled with on-chain receipts",
      "block": 84025018
    }
  ],
  "updatedAt": "2026-10-09T08:45:56.592Z",
  "indexedThroughBlock": 84025018,
  "coverage": {
    "summary": "Every settlement the Priors facilitator publishes (157 rows, 157 confirmed against receipts, 0 mismatched). Settlements by other facilitators and plain USDG transfers are not in this list.",
    "indexedThroughBlock": 84025018,
    "partial": false
  },
  "warnings": [],
  "pagination": {
    "limit": 1,
    "nextCursor": "157",
    "total": 157
  }
}

GET /api/status

GET/api/status

Chain head, the health of each public RPC endpoint, the database, indexer checkpoints with their lag, table counts, and the status of every integration.
data
StatusView

interface StatusView {
  chain: { id: number; name: string; headBlock: number | null; headAt: string | null; rpc: { url: string; label: string; verified: boolean; coolingDown: boolean; lastError: string | null; logs: boolean }[]; status: ReadStatus }
  database: { configured: boolean; status: ReadStatus; error: string | null }
  streams: { stream: string; block: number; updatedAt: string; lag: number | null }[]
  counts: { agents: number; identityEvents: number; loans: number; settlements: number; attestations: number } | null
  integrations: { key: string; label: string; status: 'live' | 'degraded' | 'unavailable' | 'not_configured'; detail: string; checkedAt: string | null }[]
  verifiedAt: string
}
Errors
None specific: a failing part is reported inside the answer. · 429 rate_limited · 500 internal
Cache
s-maxage=10, stale-while-revalidate=40
Request
curl -s "https://irogent.xyz/api/status"
ResponseLive response from this deployment, read 2026-10-09 08:45:56 UTC.
{
  "data": {
    "chain": {
      "id": 4663,
      "name": "Robinhood Chain",
      "headBlock": 84025860,
      "headAt": "2026-10-09T08:45:56.000Z",
      "rpc": [
        {
          "url": "https://rpc.mainnet.chain.robinhood.com",
          "label": "Official public RPC",
          "verified": true,
          "coolingDown": true,
          "lastError": "fetch failed",
          "logs": true
        },
        {
          "url": "https://robinhood-rpc.publicnode.com",
          "label": "PublicNode",
          "verified": true,
          "coolingDown": false,
          "lastError": "fetch failed",
          "logs": false
        },
        {
          "url": "https://robinhood.drpc.org",
          "label": "dRPC",
          "verified": true,
          "coolingDown": false,
          "lastError": "The operation was aborted due to timeout",
          "logs": false
        }
      ],
      "status": "ok"
    },
    "database": {
      "configured": true,
      "status": "ok",
      "error": null
    },
    "streams": [
      {
        "stream": "attestations",
        "block": 84024976,
        "updatedAt": "2026-10-09T08:44:29.690Z",
        "lag": 884
      },
      {
        "stream": "credit",
        "block": 84024951,
        "updatedAt": "2026-10-09T08:44:26.689Z",
        "lag": 909
      },
      {
        "stream": "credit_v1",
        "block": 71713001,
        "updatedAt": "2026-10-09T05:49:18.164Z",
        "lag": 12312859
      },
      {
        "stream": "identity",
        "block": 84024931,
        "updatedAt": "2026-10-09T08:44:23.719Z",
        "lag": 929
      },
      {
        "stream": "settlements",
        "block": 84025018,
        "updatedAt": "2026-10-09T08:44:30.701Z",
        "lag": 842
      }
    ],
    "counts": {
      "agents": 8640,
      "identityEvents": 33188,
      "loans": 31209,
      "settlements": 157,
      "attestations": 425
    },
    "integrations": [
      {
        "key": "rpc",
        "label": "Robinhood Chain RPC",
        "status": "live",
        "detail": "Head block 84025860 at 2026-10-09T08:45:56.000Z.",
        "checkedAt": "2026-10-09T08:45:56.476Z"
      },
      {
        "key": "identity",
        "label": "ERC-8004 identity registry",
        "status": "live",
        "detail": "Events indexed through block 84024931.",
        "checkedAt": "2026-10-09T08:45:56.476Z"
      },
      {
        "key": "credit",
        "label": "Priors credit (pool v2 + lens)",
        "status": "live",
        "detail": "Pool reads and the check API answer. Loan events indexed through block 84024951.",
        "checkedAt": "2026-10-09T08:45:56.476Z"
      },
      {
        "key": "payments",
        "label": "Priors x402 facilitator",
        "status": "live",
        "detail": "Facilitator healthy (186 merchants, pending 0). 0 settlements synced, last run 2026-10-09T08:44:30.665Z.",
        "checkedAt": "2026-10-09T08:45:56.476Z"
      },
      {
        "key": "settlement",
        "label": "USDG settlement asset",
        "status": "live",
        "detail": "Global Dollar (USDG, 6 decimals) at 0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168; balances read on-chain.",
        "checkedAt": "2026-10-09T08:45:56.476Z"
      },
      {
        "key": "database",
        "label": "PostgreSQL index",
        "status": "live",
        "detail": "Connected (95 ms).",
        "checkedAt": "2026-10-09T08:45:56.476Z"
      }
    ],
    "verifiedAt": "2026-10-09T04:40:00Z"
  },
  "sources": [
    {
      "id": "rpc",
      "label": "Robinhood Chain JSON-RPC (chain 4663)",
      "url": "https://rpc.mainnet.chain.robinhood.com",
      "block": 84025860,
      "at": "2026-10-09T08:45:56.901Z"
    },
    {
      "id": "facilitator",
      "label": "Priors facilitator",
      "url": "https://facilitator.priors.trade/supported"
    },
    {
      "id": "priors-check-api",
      "label": "Priors check API documentation",
      "url": "https://github.com/priors-agents/priors/blob/main/docs/CHECK-API.md"
    }
  ],
  "updatedAt": "2026-10-09T08:45:56.901Z",
  "indexedThroughBlock": 84024931,
  "warnings": []
}

One more route exists, /api/cron/index: a bearer-authenticated indexing step for hosts without a long-running worker. It is not part of the read API.