Files
bootnode/api
zeekay b06f09f6c2 fix(api): stop advertising a /docs URL that production disables
The FastAPI app deliberately turns off docs/redoc/openapi in production:

    docs_url="/docs" if not settings.is_production else None

but the root endpoint returned `"docs": "/docs"` unconditionally. So the
public API root promised a URL that 404s — api.bootno.de/ says
{"name":"Bootnode API","version":"2.0.0","docs":"/docs","status":"operational"}
while /docs, /redoc and /openapi.json all return {"detail":"Not Found"}.

Anyone reading the root to find the schema followed a dead link, and the
disabled-in-prod decision was correct, so the answer is to tell the truth
rather than re-enable them.

root() now mirrors app.docs_url and omits the key entirely when docs are off,
so the two cannot drift again — there is no second place to remember when the
setting flips. Verified both ways: with docs_url None the key is absent, with
"/docs" it is present.
2026-07-26 10:03:31 -07:00
..

Hanzo Nodes API

Multi-chain blockchain infrastructure platform providing RPC, APIs, WebSockets, Webhooks, and ERC-4337 bundling.

Features

  • Multi-Chain RPC: 100+ EVM chains with load balancing
  • Token API: ERC-20 balances, transfers, prices
  • NFT API: ERC-721/1155 ownership, metadata, transfers
  • Wallet API: Portfolio tracking, activity history
  • WebSocket Subscriptions: Real-time blockchain events
  • Webhooks: Event notifications with delivery tracking
  • ERC-4337 Bundler: Account abstraction with gasless transactions
  • Gas API: Real-time gas estimates and EIP-1559 data

Quick Start

# Start dependencies
docker compose up -d postgres redis clickhouse

# Run API locally
uv run uvicorn bootnode.main:app --reload

# Or with Docker
docker compose up -d

API Endpoints

  • GET /health - Health check
  • POST /v1/rpc/{chain}/{network} - JSON-RPC proxy
  • GET /v1/tokens/{chain}/balance/{address} - Token balances
  • GET /v1/nfts/{chain}/owner/{address} - NFT ownership
  • POST /v1/webhooks - Create webhook
  • WS /v1/ws/{chain}/{network} - WebSocket subscriptions

Environment Variables

DATABASE_URL=postgresql+asyncpg://...
REDIS_URL=redis://...
DATASTORE_URL=clickhouse://...
JWT_SECRET=...

Documentation

License

BSD-3-Clause