Gauntlet Vaults API

The Vaults API from Gauntlet — 5 operation(s) for vaults.

OpenAPI Specification

gauntlet-vaults-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Gauntlet Prices Vaults API
  description: Gauntlet vault data, user positions, and event analytics API.
  contact:
    name: Gauntlet
    url: https://gauntlet.xyz
  license:
    name: ''
  version: 1.0.0
tags:
- name: Vaults
paths:
  /v1/vaults:
    get:
      tags:
      - Vaults
      summary: List Gauntlet-curated vaults
      description: 'Returns identification-only rows for the admin-curated visible vaults, ordered most-recent-first; pass `?include_hidden=true` for every enabled vault (hidden included, disabled never). Use `/{vault_id}` for current metrics, `/{vault_id}/definition` for the full vault definition, `/{vault_id}/timeseries` for history.


        Cursor-paginated, but the default page size is the cap so most callers don''t need to think about it — pass `meta.next_cursor` back as `?next=` only if the result exceeds 1000 vaults.'
      operationId: list_vaults
      parameters:
      - name: next
        in: query
        description: Opaque cursor from previous `meta.next_cursor`.
        required: false
        schema:
          type: string
      - name: limit
        in: query
        description: Page size (1–1000, default 1000).
        required: false
        schema:
          type: integer
          format: int64
      - name: include_hidden
        in: query
        description: Include hidden (enabled but unlisted) vaults alongside visible ones. Disabled vaults are never listed.
        required: false
        schema:
          type: boolean
      responses:
        '200':
          description: List of vaults
        '401':
          description: Missing or invalid auth
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '422':
          description: Invalid cursor
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  /v1/vaults/featured:
    get:
      tags:
      - Vaults
      summary: List featured vaults
      description: 'Returns the admin-curated featured shortlist, one card per logical vault in curated order: display name, marketing description, deployed chains (highest-TVL first), supply token, aggregate TVL, and the highest 7/30/90-day APY across deployments. `vault_ids` carries per-deployment `{chainId}:{address}` ids for `/v1/vaults/{vault_id}` links, in the same order as `chains`.'
      operationId: list_featured_vaults
      responses:
        '200':
          description: Featured vault cards
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FeaturedVaultsResponse'
        '401':
          description: Missing or invalid auth
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '503':
          description: Data source unavailable
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  /v1/vaults/{vault_id}:
    get:
      tags:
      - Vaults
      summary: Get current vault metrics
      description: Returns the current metrics snapshot for a vault — same metric shape that `/timeseries` emits per point, so this is `current point` and timeseries is `historical points`. The vault's protocol-specific definition (fees, hooks, curator, etc.) lives on `/{vault_id}/definition`.
      operationId: get_vault
      parameters:
      - name: vault_id
        in: path
        description: Vault identifier (CAIP-10 `chainId:address`)
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Current vault metrics
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VaultDetailResponse'
        '401':
          description: Missing or invalid auth
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Vault not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  /v1/vaults/{vault_id}/definition:
    get:
      tags:
      - Vaults
      summary: Get vault definition
      description: 'Returns the vault''s identity + protocol-specific definition: name, owner, numeraire token, hooks, fees, curator, etc., merged inline based on `vault_type`. Aera carries hooks/feeCalculator, Morpho V1/V2 carry curator + WAD-scaled fees, Symbiotic carries identity only.'
      operationId: get_vault_definition
      parameters:
      - name: vault_id
        in: path
        description: Vault identifier (CAIP-10 `chainId:address`)
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Vault definition
        '401':
          description: Missing or invalid auth
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Vault not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  /v1/vaults/{vault_id}/timeseries:
    get:
      tags:
      - Vaults
      summary: Get vault timeseries data
      description: Returns historical metric data points. Default order is `asc` (oldest first, chart-friendly); pass `?order=desc` for newest-first list views. Supports date range filtering and cursor pagination — pass `meta.next_cursor` back as `?next=` for the next page (cursor is bound to the order it was created with). Defaults to `granularity=day` (one UTC-midnight snapshot per day); `week` returns Monday 00:00 UTC snapshots, `month` returns first-of-month 00:00 UTC snapshots, and `hour` returns the raw hourly cadence. Default page size is 1000.
      operationId: get_vault_timeseries
      parameters:
      - name: vault_id
        in: path
        description: Vault identifier
        required: true
        schema:
          type: string
      - name: start
        in: query
        description: 'Window start: ISO 8601 date (`2026-01-01`, read as 00:00:00 UTC) or RFC 3339 timestamp (`2026-01-01T00:00:00Z`).'
        required: false
        schema:
          type: string
      - name: end
        in: query
        description: 'Window end: ISO 8601 date (`2026-01-01`, read as 00:00:00 UTC) or RFC 3339 timestamp (`2026-01-01T00:00:00Z`).'
        required: false
        schema:
          type: string
      - name: next
        in: query
        description: Opaque cursor from previous `meta.next_cursor`.
        required: false
        schema:
          type: string
      - name: limit
        in: query
        description: Page size (1–10000, default 1000).
        required: false
        schema:
          type: integer
          format: int64
      - name: order
        in: query
        description: 'Sort direction: `asc` (default) or `desc`.'
        required: false
        schema:
          type: string
      - name: granularity
        in: query
        description: 'Sampling granularity: `day` (default), `hour`, `week`, or `month`. Day/week/month buckets start at 00:00 UTC; weeks start Monday and months start on the 1st.'
        required: false
        schema:
          type: string
      responses:
        '200':
          description: Timeseries data points
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VaultTimeseriesResponse'
        '401':
          description: Missing or invalid auth
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Vault not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '422':
          description: Invalid parameters
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
components:
  schemas:
    VaultTimeseriesResponse:
      type: object
      required:
      - meta
      - data
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/VaultTimeseriesPoint'
        meta:
          $ref: '#/components/schemas/TimeseriesMeta'
    FeaturedVault:
      type: object
      required:
      - slug
      - name
      - chains
      - tvl
      - vault_ids
      properties:
        apy_30d_max:
          type:
          - number
          - 'null'
          format: double
          description: Highest 30-day APY across the vault's deployments.
        apy_7d_max:
          type:
          - number
          - 'null'
          format: double
          description: 'Highest 7-day APY across the vault''s deployments, fraction

            (0.0573 = 5.73%). `null` while every window is warming up.'
        apy_90d_max:
          type:
          - number
          - 'null'
          format: double
          description: Highest 90-day APY across the vault's deployments.
        chains:
          type: array
          items:
            type: string
          description: Chain slugs the vault is deployed on, highest-TVL first.
        description:
          type:
          - string
          - 'null'
          description: 'Curated marketing description; `null` when the curator hasn''t

            written one.'
        name:
          type: string
          description: Curated display name.
        short_description:
          type:
          - string
          - 'null'
          description: 'Card-length copy (e.g. "Conservative lending yield with low

            risk"). `null` when the curator hasn''t written any; consumers

            decide whether to fall back to `description`.'
        slug:
          type: string
          description: Admin registry slug for the logical vault (stable identifier).
        supply_token:
          type:
          - string
          - 'null'
          description: 'Supply (numeraire) token symbol, from the highest-TVL deployment

            that reports one.'
        tvl:
          $ref: '#/components/schemas/CuratedTvl'
          description: Aggregate TVL across the vault's deployments ("Total Supply").
        updated_at:
          type:
          - string
          - 'null'
          format: date-time
          description: 'Most recent indexer snapshot among the vault''s deployments;

            `null` when no deployment carried a usable timestamp.'
        vault_ids:
          type: array
          items:
            type: string
          description: 'Per-deployment API vault ids (`{chainId}:{address}`, same order

            as `chains`) for `/v1/vaults/{vault_id}` links.'
    VaultDetailResponse:
      type: object
      required:
      - meta
      - data
      properties:
        data:
          $ref: '#/components/schemas/VaultDetail'
        meta:
          $ref: '#/components/schemas/BasicMeta'
    BasicMeta:
      type: object
      required:
      - request_id
      - refreshed_at
      properties:
        refreshed_at:
          type: string
          format: date-time
        request_id:
          type: string
    CuratedTvl:
      type: object
      description: 'USD amount on curated aggregates: decimal string, `null` when the

        pricing service is not configured.'
      properties:
        usd:
          type:
          - string
          - 'null'
    PartialResponseError:
      type: object
      required:
      - code
      - message
      properties:
        code:
          type: string
          description: Machine-readable error code for the isolated item failure.
        message:
          type: string
          description: Human-readable error message.
        resource_id:
          type:
          - string
          - 'null'
          description: Resource that failed inside the aggregate response, when known.
    FeaturedVaultsResponse:
      type: object
      required:
      - meta
      - data
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/FeaturedVault'
        meta:
          $ref: '#/components/schemas/ListMeta'
    VaultTimeseriesPoint:
      type: object
      required:
      - timestamp
      - tvl
      - unit_price
      - total_supply
      properties:
        apy_30d:
          type:
          - number
          - 'null'
          format: double
        apy_7d:
          type:
          - number
          - 'null'
          format: double
        apy_90d:
          type:
          - number
          - 'null'
          format: double
        timestamp:
          type: string
          format: date-time
        total_supply:
          type: string
        tvl:
          $ref: '#/components/schemas/AmountPair'
        unit_price:
          type: string
    VaultDetail:
      type: object
      required:
      - vault_id
      - chain_id
      - address
      - vault_type
      - name
      - symbol
      - numeraire_token
      - metrics
      properties:
        address:
          type: string
        chain_id:
          type: integer
          format: int64
        metrics:
          $ref: '#/components/schemas/VaultMetrics'
        name:
          type: string
        numeraire_token:
          $ref: '#/components/schemas/TokenRef'
        symbol:
          type: string
        vault_id:
          type: string
        vault_type:
          type: string
    ListMeta:
      type: object
      required:
      - request_id
      - refreshed_at
      - count
      properties:
        count:
          type: integer
          format: int64
          description: Rows in this response.
        refreshed_at:
          type: string
          format: date-time
        request_id:
          type: string
    ErrorResponse:
      type: object
      description: Standard error response envelope returned on 4xx/5xx
      required:
      - error
      properties:
        error:
          $ref: '#/components/schemas/ErrorBody'
    ErrorBody:
      type: object
      required:
      - code
      - message
      properties:
        code:
          type: string
          description: Machine-readable error code (e.g. `NOT_FOUND`, `UNAUTHORIZED`)
        details: {}
        message:
          type: string
          description: Human-readable error message
    AmountPair:
      type: object
      description: 'Decimal-string metric paired across native (numeraire-token) and USD.

        `native` is always present; `usd` is JSON null when pricing is unavailable.'
      required:
      - native
      properties:
        native:
          type: string
        usd:
          type:
          - string
          - 'null'
    VaultMetrics:
      type: object
      required:
      - tvl
      - unit_price
      - total_supply
      properties:
        apy_30d:
          type:
          - number
          - 'null'
          format: double
        apy_7d:
          type:
          - number
          - 'null'
          format: double
        apy_90d:
          type:
          - number
          - 'null'
          format: double
        as_of:
          type:
          - integer
          - 'null'
          format: int64
        total_supply:
          type: string
        tvl:
          $ref: '#/components/schemas/AmountPair'
        unit_price:
          type: string
    TokenRef:
      type: object
      required:
      - address
      properties:
        address:
          type: string
        decimals:
          type:
          - integer
          - 'null'
          format: int32
        symbol:
          type:
          - string
          - 'null'
    TimeseriesMeta:
      type: object
      required:
      - request_id
      - refreshed_at
      - count
      - limit
      properties:
        count:
          type: integer
          format: int64
          description: Number of points in this response.
        end:
          type:
          - string
          - 'null'
          format: date-time
        limit:
          type: integer
          format: int64
          description: Page-size cap actually applied.
        next_cursor:
          type:
          - string
          - 'null'
          description: Set when more pages exist; pass back as `?next=`.
        partial_errors:
          type:
          - array
          - 'null'
          items:
            $ref: '#/components/schemas/PartialResponseError'
          description: Item-scoped failures isolated from an aggregate response.
        refreshed_at:
          type: string
          format: date-time
        request_id:
          type: string
        start:
          type:
          - string
          - 'null'
          format: date-time
          description: Window bounds the response covers (echoes the request when set).