---
title: "EVault factory governance"
method: GET
path: "/v3/governance/evault-factory"
tags: ["Governance"]
---

# EVault factory governance

`GET /v3/governance/evault-factory`

## Request

- Base URL: `https://v3.euler.finance`
- URL: `https://v3.euler.finance/v3/governance/evault-factory`
- Auth: none required

Who governs the chain's EVault factory, whose implementation every upgradeable EVK vault
runs. Upgrading that implementation is an admin call of the factory's governor; on every
indexed chain the governor's admin is the EVault factory timelock, so an upgrade is
scheduled on the timelock and runs after its delay. The governor's pause guardians can
pause the factory, and with it every upgradeable vault, without delay; its unpause admins
unpause it.
- `chainId` is required. An indexed chain without an indexed EVault factory and upgrade
  admin answers 404 `NOT_FOUND`, as a missing vault does.
- `governor.address` is the `contract` for `/v3/governance/roles` (admin, pause guardians,
  unpause admins). `timelock.address` is the `timelock` for
  `/v3/governance/timelock-operations` (queued upgrades) and the `contract` for
  `/v3/governance/roles`.
- Block numbers and delays (seconds) are decimal strings; timestamps are ISO 8601.

## Query parameters

- `chainId` integer, required

## Response `200`

EVault factory governance

- object
  - `data` EVaultFactoryGovernance
    - `chainId` integer, required
    - `factory` string, required: The EVault factory, whose implementation every upgradeable EVK vault of the chain runs.
    - `governor` object, required: The factory's upgrade admin, a `FactoryGovernor`. Holders of its admin role make admin calls to the factory, implementation upgrades included. Its pause guardians pause the factory and its unpause admins unpause it, without delay. Pass `address` as `contract` to `/v3/governance/roles` for these holders.
      - `address` string, required
      - `paused` boolean, required: Whether the factory's implementation is the read-only proxy of the governor's latest pause, which makes every upgradeable vault of the factory read-only.
      - `lastPauseChange` EVaultFactoryPauseChange, required
        - `action` 'paused' | 'unpaused', required: `paused`: a pause guardian installed a read-only proxy as the factory's implementation, which makes every upgradeable vault of the factory read-only. `unpaused`: an unpause admin restored the implementation the proxy wrapped.
        - `account` string, required: The pause guardian or the unpause admin.
        - `blockNumber` string, required
        - `timestamp` string, date-time, required: Block timestamp.
        - `txHash` string, required
    - `timelock` object, nullable, required: The chain's EVault factory timelock (`eVaultFactoryTimelockController`); null when none is indexed. Pass `address` as `timelock` to `/v3/governance/timelock-operations` for the upgrades it queued and ran, and as `contract` to `/v3/governance/roles` for its proposers, executors and cancellers.
      - `address` string, required
      - `minDelay` string, nullable, required: Current minimum delay in seconds, from the timelock's latest `MinDelayChange`.
      - `isGovernorAdmin` boolean, required: Whether the timelock holds the governor's admin role (`0x00…00`). Every holder of that role can upgrade the factory; `/v3/governance/roles` lists them.
  - `meta` PaginationMeta
    - `total` integer: Exact total count when the endpoint provides one.
    - `hasMore` boolean: Indicates whether another page exists beyond the current page.
    - `offset` integer
    - `limit` integer: Echoed page size after endpoint-side clamping.
    - `outcome` 'disabled' | 'removed': On a toolbox config DELETE, what happened to the row.
    - `products` ProductLabels[]: On a curation vault `POST`, `PUT`, or `PATCH`: the products the write touched (the one the vault left and the one it joined) as they are after the write, `governanceMode` included, so the caller applies them instead of re-reading.
      - `id` string, required
      - `chainId` integer, required
      - `entityId` string, required
      - `coBrandEntityIds` string[], required: Additional entities whose logos should be displayed. Product management remains exclusively with entityId.
      - `name` string, required
      - `logo` string, nullable
      - `description` string, nullable
      - `url` string, nullable: Absolute https URL.
      - `portfolioNotice` string, nullable
      - `isDeprecated` boolean, required
      - `deprecationReason` string, nullable
      - `notExplorable` boolean, nullable, required: Curator listing flag, outranked by platform overrides and by Euler's deprecation on the assessment. `null` leaves the decision to deprecation, `true` hides the vault(s) from discovery, `false` keeps listed a vault the curator deprecated, but never one Euler deprecated.
      - `governanceMode` 'governed' | 'ungoverned' | 'unknown', required: Derived by the server from the on-chain governor of member vaults; clients cannot set it. Products are created as `unknown`. Every vault assignment recomputes the mode over the resulting member set and rejects sets that mix governed and ungoverned vaults. Layer 2 adopts `governed` or `ungoverned` for an `unknown` product once its membership verifies against chain state. Entity members cannot update or delete an `ungoverned` product or its vaults after the initial assignment.
      - `resolved` ResolvedProductLabels, required: Read-time entity fallbacks for display. Derived, never stored.
        - `entityName` string, nullable, required
        - `url` string, nullable, required: Product url, falling back to the owning entity url.
        - `logo` string, nullable, required: Product logo, falling back to the owning entity logo.
      - `anyExplorableLend` boolean, required: True when at least one member vault is lend-discoverable per the materialized visibility verdicts. Live chain state (e.g. borrowability) is deliberately excluded.
      - `anyExplorableBorrow` boolean, required: True when at least one member vault is borrow-discoverable per the materialized visibility verdicts. Live chain state (e.g. borrowability) is deliberately excluded.
      - `createdAt` string, date-time, required
      - `updatedAt` string, date-time, required
      - `hold` LabelHoldSummary: What a draft read shows on a held row.
        - `id` string, uuid, required
        - `kind` 'quarantine' | 'entity-hold', required
        - `reason` string, required
        - `since` string, date-time, required
      - `platformListing` ProductPlatformListing: The platform-owned discovery decision on a product, as a product row shows it.
        - `notExplorableLend` boolean, required
        - `notExplorableBorrow` boolean, required
        - `reason` string, nullable, required
    - `timestamp` string, date-time, required
    - `chainId` string: Comma-separated chain IDs for multi-chain responses.
    - `degradedProviders` string[]: Live providers whose data is incomplete in this response.
    - `excludedChains` object[]: On a read across chains that names no `chainId`: the served chains it left out because they do not run the capability the operation needs, rather than reading them as empty. Absent when no chain was left out.
      - `chainId` integer, required
      - `capability` 'indexing' | 'activity' | 'prices' | 'historicalPrices' | 'assessments' | 'labels' | 'logos' | 'stats' | 'risk' | 'rewards' | 'apys', required

## Other responses

- `400`: Bad request
- `404`: Not found
- `429`: Rate limited
- `500`: Internal server error

## Changes

- **2026-10-30** `e987d7695ec1`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/euler/apis/euler-data-api-v3/changes/v3/governance/evault-factory/get.md)

---

[API](https://skmtc.dev/euler/apis/euler-data-api-v3.md) - [All operations](https://skmtc.dev/euler/apis/euler-data-api-v3/llms.txt) - [OpenAPI document](https://skmtc.dev/euler/apis/euler-data-api-v3/revisions/e987d7695ec1?raw)
