Public
Config, Status & Prices
Key-free discovery routes (60 requests a minute per IP) and the price tables. Call GET /api/v1/config before anything else: the network, every contract, the mains and their pair assets, the path rules and the feature switches.
Rendered from /openapi.json. Amounts are raw decimal strings in the units of the asset named beside them; USD values are USD × 1e18, null when unknown, with a usdSource. Quotes are hints: the contract is the final check.
GET
/api/v1/config
Deployment config. Everything an SDK or agent needs before its first call: the network, every contract, the mains with their pair assets, the path rules, the create-form limits, the market-approval EIP-712 domain and the feature switches. No key (discovery tier, 60 a minute per IP). No RPC, no database.
Auth: None
| Field | Type | Description |
|---|---|---|
| apiVersion | string | |
| network | string | |
| chainId | integer | |
| chainName | string | |
| nativeSymbol | string | |
| deploymentBlock | integer | null | |
| contracts | object | Contract name to EIP-55 checksummed address; null when not deployed on this network. |
| legacyLoanHubs | string[] | |
| defaultMain | string | Key of the main the dapp opens on. |
| mains | object[] | |
| bond | object | |
| pathRules | object | The ASwap route rules. "pairAsset" = the main's quoteToken, "token" = a factory token whose quoteToken is that main. |
| createLimits | object | |
| eip712 | object | |
| features | object | Feature switches: which products are live on this network. |
| discovery | object |
200 Config429 Rate limit exceeded (60 a minute per IP). X-RateLimit-* headers on every answer.
GET
/api/v1/status
Index status. Lets an agent tell stale data from no data: the chain head, the newest synced block, the lag between them and the transactions whose projection is incomplete. No key (discovery tier, 60 a minute per IP). Cached 10 s.
Auth: None
| Field | Type | Description |
|---|---|---|
| network | string | |
| chainId | integer | |
| headBlock | integer | null | |
| headTime | integer | null | Unix seconds. |
| lastSyncedBlock | integer | null | Newest synced tx from any source (dapp, sdk, backfill). An on-demand sync of a fresh tx moves it to the head, so it does not measure lag. |
| lastSyncedTime | integer | null | Unix seconds. |
| lastBackfilledBlock | integer | null | The sync worker's cursor: the newest block it has posted a tx from to POST /api/v1/sync, including txs another caller synced first. Null before its first post. |
| lastBackfilledTime | integer | null | Unix seconds of lastBackfilledBlock. Null when it cannot be read. |
| lagBlocks | integer | null | headBlock - lastBackfilledBlock (the sync worker's lag). Null when either is unknown. |
| lagSeconds | integer | null | headTime - lastBackfilledTime. Null when either is unknown. A quiet chain also raises it: read it with partialTxs and rawTxs. |
| partialTxs | integer | |
| rawTxs | integer | |
| unconfirmedTxs | integer | |
| features | object | Feature switches: which products are live on this network. |
| checkedAt | integer | Unix seconds. |
200 Status. X-RateLimit-* headers on every answer (200, 429, 503).429 Rate limit exceeded (60 a minute per IP). X-RateLimit-* headers on every answer.503 Status unavailable (status_unavailable)
GET
/contracts.json
Contract addresses. The network, chain id and contract addresses of this deployment, with links to /api/v1/config (`config`) and /api/v1/status (`status`). No key. Addresses are checksummed. Addresses are EIP-55 checksummed here and in /api/v1/config only; every data route answers lower-case addresses.
Auth: None
| Field | Type | Description |
|---|---|---|
| chain | string | The network's display name. |
| chainId | integer | |
| usdb | string | Deprecated single-main key: the default main's pair asset. Use mains[].pairAsset. |
| swap | string | |
| loanHub | string | |
| mainToken | string | Deprecated single-main key: the default main. Use mains[].main. |
| staking | string | Deprecated single-main key: the vault (ONE vault serves every main). Use mains[].vault. |
| factory | string | |
| vesting | string | |
| taxes | string | |
| leverage | string | |
| marketTrading | string | The public market host. |
| resolver | string | |
| privateMarket | string | The private market host. |
| reader | string | TrancheReader. |
| trancheReader | string | TrancheReader (same as reader). |
| redemptionReader | string | |
| erc8004Registry | string | |
| upDown | string | |
| mainLens | string | MainLens (the read helper of the mains: partial-sell amounts and other views). |
| network | string | The network key. |
| deploymentBlock | integer | |
| liquidator | string | |
| hopExecutor | string | |
| bondToken | string | |
| bondDecimals | integer | |
| wrappedNative | string | |
| mains | object[] | |
| tranche | string | The public market host (same as marketTrading). |
| tranchePrivate | string | The private market host (same as privateMarket). |
| config | string | Path of GET /api/v1/config. |
| status | string | Path of GET /api/v1/status. |
200 Contracts429 Rate limit exceeded (60 a minute per IP). X-RateLimit-* headers on every answer.
GET
/.well-known/agent.json
Agent manifest. Agent discovery manifest. No key. Its URLs use the site's fixed base URL, never the request host. Static file: no rate limit.
Auth: None
| Field | Type | Description |
|---|---|---|
| schema_version | string | |
| name | string | |
| description | string | |
| url | string | |
| logo | string | |
| docs | object | |
| api | object | |
| chain | object | |
| agent_registration | object | |
| integrations | object | |
| social | object |
200 Manifest
GET
/.well-known/ai-plugin.json
AI plugin manifest. AI plugin manifest. No key. Its URLs use the site's fixed base URL, never the request host. Static file: no rate limit.
Auth: None
| Field | Type | Description |
|---|---|---|
| schema_version | string | |
| name_for_human | string | |
| name_for_model | string | |
| description_for_human | string | |
| description_for_model | string | |
| auth | object | |
| api | object | |
| logo_url | string | |
| contact_email | string | |
| legal_info_url | string |
200 Manifest
GET
/api/v1/prices
USD prices of the pair assets. One row per pair asset, bond asset and native coin: its USD price and where it came from.
Auth: API Key
| Field | Type | Description |
|---|---|---|
| data | object[] | |
| network | string | |
| chainId | integer | |
| asOf | string | |
| data[].asset | string | |
| data[].symbol | string | null | |
| data[].decimals | integer | null | |
| data[].role | string (pair | bond | native)[] | |
| data[].mains | string[] | |
| data[].priceUsdE18 | UsdE18 | null | USD x 1e18 as a decimal string. null = unknown (never 0, never 1:1). Comes with a usdSource. |
| data[].source | string (fixed | feed | hop | offchain) | null | The configured price source kind; null when none is configured. |
| data[].usdSource | UsdSource | null | Where a USD value came from; null when the value is null. Details per pair asset in GET /api/v1/prices. |
| data[].feed | string | null | |
| data[].maxAgeSec | integer | null | |
| data[].updatedAt | string | null | The time the price is for; null when there is no fresh price. |
| data[].sourceRef | string | null | |
| data[].stale | boolean |
200 Prices401 Missing or invalid API key429 Rate limit exceeded
GET
/api/v1/prices/tokens
Token prices. Current prices of up to 100 BASIS tokens. An address with no Sync answers found: false with null prices, and so does an invite-only market the caller may not see (GET /api/v1/markets explains the rule).
Auth: API Key
| Param | Type | Description |
|---|---|---|
| addresses * | string | Comma list, 1 to 100 addresses. |
| Field | Type | Description |
|---|---|---|
| data | object[] | |
| chainId | integer | |
| data[].address | string | |
| data[].found | boolean | |
| data[].main | string | null | |
| data[].pairAsset | string | null | |
| data[].pairDecimals | integer | null | |
| data[].priceE18 | E18 | null | Pair per whole token. |
| data[].priceMainE18 | E18 | null | Main per whole token. |
| data[].priceUsdE18 | UsdE18 | null | USD x 1e18 as a decimal string. null = unknown (never 0, never 1:1). Comes with a usdSource. |
| data[].usdSource | UsdSource | null | Where a USD value came from; null when the value is null. Details per pair asset in GET /api/v1/prices. |
| data[].block | integer | null | |
| data[].time | string | null |
200 Prices400 addresses missing, malformed or more than 100 (bad_param)401 Missing or invalid API key429 Rate limit exceeded