Erebor is the primary management backend for SuperVaults. Go service, REST endpoints organized into 13 domains.
Base URL: https://erebor.superform.xyz
Auth: Authorization: Bearer <jwt> (except public endpoints)
OpenAPI spec: erebor-openapi2.json
Settings changes (fees, PPS parameters, timelocks, banned leaves) are on-chain transactions. The curator UI constructs calldata via Erebor’s /prepare endpoints and your wallet signs and submits them to the protocol contracts directly. No Erebor REST endpoint is called for the actual setting change.
The Erebor OpenAPI spec does not include the Zap Terminal AI analysis endpoint (GET /api/v1/vaults/{vaultAddress}/ai/analysis?chain_id={}). This endpoint is operational but not yet in the spec.
Auth
| Endpoint | Method | Auth | Description |
|---|
/api/v1/auth/me | GET | JWT | Primary auth endpoint. Returns current user with all vault roles. |
/api/v1/auth/verify | GET | JWT | Lightweight JWT verification. Returns { verified, walletAddress, isManager, vaults[] }. |
Vaults
| Endpoint | Method | Auth | Description |
|---|
/api/v1/public/vaults | GET | None | Public vault list with TVL and APY |
/api/v1/vaults | GET | JWT | Authenticated vault list (?detail=minimal&limit=500) |
/api/v1/vaults/{chain_id}/{vault_address} | GET | JWT | Full vault detail: PPS, supply, allocation, managers, fee_config, upkeep_info |
Analytics (18 Endpoints)
All under /api/v1/vaults/{chain_id}/{address}/analytics/:
| Sub-path | Method | Description |
|---|
overview | GET | APY, TVL, depositor count, strategy count |
pps | GET | Price-per-share history |
performance | GET | Aggregate performance metrics |
performance/apy?period={p} | GET | APY time series |
performance/tvl?period={p} | GET | TVL time series |
risk | GET | Risk score, concentration, drawdown, Sharpe, volatility |
risk/concentration | GET | Concentration breakdown (not surfaced in UI) |
risk/drawdown | GET | Drawdown detail (not surfaced in UI) |
risk/volatility | GET | Volatility detail (not surfaced in UI) |
users | GET | Total/active/new/churned users |
users/retention | GET | Retention cohorts |
users/top | GET | Top holders by balance |
users/cohorts | GET | Cohort analysis (not surfaced in UI) |
operations | GET | Transaction count, gas, slippage |
operations/transactions | GET | Transaction history table |
operations/volume | GET | Deposit/withdraw volume |
social | GET | Social feed for Zap Terminal |
export | GET | Analytics export (not surfaced in UI) |
POST /api/v1/analytics/compare for cross-vault comparison is available but not surfaced in the UI.
Merkle (14 Endpoints)
| Endpoint | Method | Description |
|---|
/api/v1/merkle/configs/versions | GET | Config version history |
/api/v1/merkle/configs/version | GET | Single config by version number |
/api/v1/merkle/configs/active | GET | Active config version |
/api/v1/merkle/configs | POST | Create new hook config |
/api/v1/merkle/configs/{id} | GET | Single config by ID |
/api/v1/merkle/configs/activate | PUT | Activate a config version |
/api/v1/merkle/trees | GET | All trees for vault |
/api/v1/merkle/trees/{id} | GET | Single tree (not surfaced in UI) |
/api/v1/merkle/proofs | GET | All leaf proofs |
/api/v1/merkle/proofs/lookup | GET | Single proof lookup (not surfaced in UI) |
/api/v1/merkle/generate | POST | Start async generation (409 = in progress) |
/api/v1/merkle/jobs/{id} | GET | Poll generation job |
/api/v1/merkle/jobs | GET | Recent jobs list |
/api/v1/merkle/sync | GET | Sync status (204 = in sync) |
Registry (18 Endpoints)
| Endpoint | Method | Description |
|---|
/api/v1/registry/yield-sources | GET | List yield sources (?chain_id={}&is_active=true&limit=250) |
/api/v1/registry/yield-sources | POST | Create yield source |
/api/v1/registry/yield-sources/{chain_id}/{address} | GET | Single yield source |
/api/v1/registry/yield-sources/{chain_id}/{address} | PUT | Update yield source |
/api/v1/registry/yield-sources/{id} | DELETE | Delete yield source |
/api/v1/registry/yield-sources/sync | POST | Import from Morpho/Pendle URL |
/api/v1/registry/oracles | GET | List oracles |
/api/v1/registry/oracles | POST | Create oracle |
/api/v1/registry/oracles/{chain_id}/{oracle_address} | GET | Single oracle |
/api/v1/registry/oracles/{chain_id}/{oracle_address} | PUT | Update oracle |
/api/v1/registry/oracles/{id} | DELETE | Delete oracle |
/api/v1/registry/hooks | GET | List hooks (?is_active=true&limit=100) |
/api/v1/registry/hooks | POST | Create hook |
/api/v1/registry/hooks/{id} | PUT | Update hook |
/api/v1/registry/hooks/{id} | DELETE | Delete hook |
/api/v1/registry/token-assets | GET | Token metadata (public) |
/api/v1/registry/token-assets/{chain_id}/{address} | GET | Single token |
/api/v1/registry/token-assets | PUT | Register/upsert custom token |
Users (6 Endpoints)
| Endpoint | Method | Description |
|---|
/api/v1/users | GET | All users for vault (?vault_address={}&chain_id={}) |
/api/v1/users/secondary-manager/prepare | POST | Prepare add secondary manager tx |
/api/v1/users/secondary-manager/remove/prepare | POST | Prepare remove secondary manager tx |
/api/v1/users/view-only | POST | Add view-only user (off-chain) |
/api/v1/users/view-only/{wallet} | DELETE | Remove view-only user |
/api/v1/users/{wallet}/display-name | PATCH | Update display name |
Yield Sources (6 Endpoints)
| Endpoint | Method | Description |
|---|
/api/v1/yield-sources/prepare-add | POST | Prepare add tx |
/api/v1/yield-sources/prepare-remove | POST | Prepare remove tx |
/api/v1/yield-sources/prepare-update-oracle | POST | Prepare oracle update tx |
/api/v1/yield-sources/prepare-bulk-add | POST | Prepare bulk add tx |
/api/v1/yield-sources/prepare-bulk-remove | POST | Prepare bulk remove tx |
/api/v1/yield-sources/prepare-bulk-update-oracle | POST | Prepare bulk oracle update tx |
Vault Services (6 Endpoints)
| Endpoint | Method | Description |
|---|
/api/v1/vaults/{chain_id}/{vault}/services | GET | Per-vault service list |
/api/v1/vaults/{chain_id}/{vault}/services/{name}/pause | PUT | Pause service |
/api/v1/vaults/{chain_id}/{vault}/services/{name}/resume | PUT | Resume service |
/api/v1/vaults/{chain_id}/{vault}/services/enabled | PUT | Bulk enable/disable |
/api/v1/vaults/{chain_id}/{vault}/services/{name} | PUT | Update service config (not surfaced in UI) |
/api/v1/services/bulk | PUT | Bulk service update (not surfaced in UI) |
Allocation
| Endpoint | Method | Description |
|---|
/api/v1/vaults/{chain_id}/{vault_address}/ladder/{ladder_type} | GET | Get allocation configuration by type |
Emergency Pause (3 Endpoints)
| Endpoint | Method | Description |
|---|
/api/v1/vaults/pause-status | GET | Batch pause status (?vaults={chainId}:{addr},...) |
/api/v1/vaults/emergency-pause/prepare | POST | Prepare on-chain pause tx |
/api/v1/vaults/emergency-unpause/prepare | POST | Prepare on-chain unpause tx |
Vault Creation (3 Endpoints)
| Endpoint | Method | Description |
|---|
/api/v1/vaults/create/prepare | POST | Vault creation calldata |
/api/v1/vaults/create/confirm | POST | Submit tx hash (409 = duplicate) |
/api/v1/vaults/create/jobs/{id} | GET | Poll creation job status |
Admin (3 Endpoints)
| Endpoint | Method | Timeout | Description |
|---|
/api/v1/admin/backfill/apy | POST | 120s | APY backfill (max 90 days) |
/api/v1/admin/backfill/tvl | POST | 120s | TVL backfill (max 90 days) |
/api/v1/admin/backfill/events | POST | 120s | Events backfill (max 365 days) |
Audit (3 Endpoints)
| Endpoint | Method | Description |
|---|
/api/v1/audit/logs | GET | Query audit trail (not surfaced in UI) |
/api/v1/audit/logs/{id} | GET | Single audit log entry |
/api/v1/audit/export | GET | Export audit logs (CSV or JSON via Accept header) |
Available for automation. See Webhooks & Event Streaming.
Zap Terminal AI (Undocumented)
Called by the Zap Terminal in the Dashboard but not included in the Erebor OpenAPI spec:
GET /api/v1/vaults/{vaultAddress}/ai/analysis?chain_id={chain_id}
Authorization: Bearer <jwt>
Schema and stability not officially documented. The spec will be updated in a future release.