Search markets, wallets, addresses, or go somewhere
Read-only GraphQL for Boros market data. Clients call named persisted operations — no raw query strings.
Every request is a POST with an operationName and a variables object. Raw query text is rejected — the GraphQL document for each operation lives on the server and is selected by name. Advanced clients may send operationId instead, but not together with operationName.
The beta endpoint is public and does not require an API key. It is still constrained to the persisted operations and variable caps listed below. Usehttps://graphql.borosexplorer.com as the canonical public URL.
curl -s https://graphql.borosexplorer.com \
-H 'content-type: application/json' \
--data '{"operationName":"MarketDirectory","variables":{"status":"live","limit":10,"offset":0}}'Try any operation directly from this page. Pick a name, fill the variables, and run it against the live endpoint.
query ApiInfo {
api_info(limit: 1) {
api_name
schema_version
release_channel
read_only
public_unauthenticated
generated_at
}
}Click Run to see a live response.Every accepted operation is listed below with its root response key, variables, and bounds. Inputs use camelCase variable names such as marketId, fromTs, and toTs. Calls outside these bounds are rejected with a 400 before reaching the GraphQL backend. A ! suffix marks a required variable; = marks the default when omitted. Status filters accept live, pending, and expired.
| Name | Root key | Variables | Limit cap | Cache TTL |
|---|---|---|---|---|
| ApiInfo | api_info | none | fixed | 300s |
| Freshness | freshness | none | fixed | 15s |
| MarketById | market_details | marketId! | fixed | 15s |
| MarketDirectory | markets | status=live, limit=50, offset=0 | 100 | 15s |
| MarketHistory | market_history_hourly | marketId!, fromTs!, toTs!, limit=500, offset=0 | 500 | 120s |
| MarketLiquidations | liquidations | marketId!, limit=100, offset=0 | 100 | 30s |
| MarketSettlementRates | settlement_rates | marketId!, fromTs!, toTs!, limit=100, offset=0 | 100 | 120s |
| MarketTrades | trades | marketId!, limit=100, offset=0 | 100 | 30s |
| RecentLiquidations | liquidations | limit=100, offset=0 | 100 | 30s |
| RecentTrades | trades | limit=100, offset=0 | 100 | 15s |
| SettlementRates | settlement_rates | limit=100, offset=0 | 100 | 120s |
| VaultDirectory | vaults | status=live, limit=100, offset=0 | 100 | 60s |
| VaultHistory | vault_history | marketId!, fromTs!, toTs!, limit=500, offset=0 | 500 | 300s |
Operations select from the models below. The public response root key is the key under data; the underlying view name is included for provenance.
| View | Root key | Purpose |
|---|---|---|
| gql.market_summaries | markets | Filterable market directory with status, OI, volume, APR, and provenance. |
| gql.market_details | market_details | Single-market detail fields with current snapshot and parameter context. |
| gql.market_history_hourly | market_history_hourly | Hourly market chart points for APR, OI, volume, mark, bid/ask. |
| gql.trades | trades | Trade ledger with raw size and USD-estimate fields, joined to market metadata. |
| gql.liquidations | liquidations | Forced-close events with signed raw size, USD estimate, and fee fields. |
| gql.settlement_rates | settlement_rates | Exchange funding settlement rows joined to Boros market windows. |
| gql.vault_summaries | vaults | Current AMM vault state joined to market metadata. |
| gql.vault_history | vault_history | Historical AMM vault TVL, APY, capacity, and utilization. |
| gql.api_info | api_info | API metadata: version, channel, read-only state. |
| gql.freshness | freshness | Latest source timestamps and freshness state. |
Conventions that hold across every operation:
0.0521 = 5.21%). Output time fields ending in _at are UTC ISO strings. Input window variables fromTs and toTsmust be Unix epoch seconds, not ISO strings or JavaScript milliseconds.limit variable also accept offset. Offset pagination on live trade and liquidation ledgers is best-effort because new rows can land between requests. Trades are ordered by block_timestamp desc, id desc; liquidations by block_timestamp desc, block_number desc, log_index desc.Freshness when you need a global staleness check without pulling market rows. It accepts no variables and returns the fixed source set.X-Boros-GraphQL-Cache response header.Validation errors from this endpoint return { "error": { "message": "..." } }. Backend execution errors are normalized to the same envelope instead of exposing backend-specific paths.
| Status | Cause |
|---|---|
| 400 | malformed body, raw query text, unknown operation, or variables outside the manifest cap |
| 413 | request body exceeds 64 KiB |
| 415 | missing application/json content-type |
| 405 | method other than POST or OPTIONS |
| 500 | proxy configuration is missing |
| 502 | GraphQL backend did not respond or returned an execution error |