- Docs
- Developers
- Indexer API
Developers
Indexer API
Query reconciled operations and understand the authenticated partner boundary.
The Go service continuously ingests recognized Trust Stack events into PostgreSQL and exposes bounded read endpoints. It is a discovery and integration layer, not a transaction signer.
Public reads#
The public surface includes health/readiness, operation discovery, token-lock and vesting reads, and product-specific indexed collections used by the dApp and marketing proof pages.
| Endpoint | Returns |
|---|---|
GET /healthz, GET /readyz | process health and database readiness |
GET /v1/operations, GET /v1/operations/{eventHash} | reconciled operation events |
GET /v1/fixed-locks, GET /v1/fixed-locks/{vault} | token locks |
GET /v1/vesting, GET /v1/vesting/{vault} | vesting schedules |
GET /v1/payment-streams | payment streams |
GET /v1/staking-positions | staking positions |
GET /v1/airdrop-campaigns, GET /v1/airdrop-claims | Merkle airdrop campaigns and claims |
GET /v1/digital-asset-locks | Digital Asset locks |
GET /v1/lp-locks | Dexlyn LP locks |
GET /v1/balances/events | a server-sent event stream of native SUPRA balance refresh hints for one account |
POST /v1/digital-assets, GET /v1/digital-assets/media/{digest}, GET /v1/digital-assets/metadata/{digest} | Digital Asset media upload (at most 5 MiB) and the content-addressed media and metadata it publishes |
Position collections accept role filters (creator, beneficiary, or participant, plus
product-specific filters such as staker or recipient), a lifecycle status, and page and
limit (at most 100) parameters. Each record carries the originating packageAddress and its
moduleVersion, so revision-6 positions (module version 4) are distinguishable from claim-only
revision-5 and earlier positions. The dApp's My positions table reads these collections.
List endpoints enforce bounded limits, deterministic ordering, validated filters, and pagination.
Treat response schemas as versioned contracts; the canonical OpenAPI document lives at
apps/indexer-api/api/openapi.yaml.
Ingestion checks#
- configured chain ID must match the Supra response header;
- only exact registered package/module/event types are accepted;
- unknown fields and malformed values fail strict parsing;
- addresses and unsigned integers are canonicalized;
- the event hash is cross-checked against its emission proof;
- database writes are idempotent.
Partner APIs#
Authenticated partners may create idempotent operation intents and manage a bounded set of webhook destinations. API credentials and encrypted signing secrets are server-side only. Reusing an idempotency key with different semantics returns a conflict rather than silently changing the request.
Webhook delivery#
Deliveries are durable and at least once. Each destination receives an event-hash idempotency key, timestamp, and HMAC-SHA256 signature. Retries are capped. Redirects, proxy environment variables, private networks, loopback, link-local, carrier-grade NAT, documentation ranges, and DNS rebinding targets are rejected.
Consumers must verify the signature, enforce a timestamp window, and deduplicate by event hash.