---
title: "Timelock operations"
method: GET
path: "/v3/governance/timelock-operations"
tags: ["Governance"]
---

# Timelock operations

`GET /v3/governance/timelock-operations`

## Request

- Base URL: `https://v3.euler.finance`
- URL: `https://v3.euler.finance/v3/governance/timelock-operations`
- Auth: none required

Operations scheduled on suite timelocks and on the EVault factory timelock, newest
scheduling first. Each operation carries its latest scheduling and the calls of that
scheduling, ordered by `index`, with calldata as scheduled (not decoded).
- `chainId` is required.
- At most one of `timelock`, `governor` and `vault`; more than one answers 400.
  `governor` selects both timelocks of that governor's suite; `vault` selects the
  timelocks of the suite of the vault's current governor.
- `status` is computed at request time: a scheduled operation is `pending` until
  `readyAt` and `ready` from `readyAt` on, as `TimelockController.isOperationReady`.
  An executed operation is `executed` and a cancelled one `cancelled`.
- Block numbers, `readyAt` (Unix seconds), delays (seconds) and call values (wei) are
  decimal strings; event timestamps are ISO 8601.

## Query parameters

- `chainId` integer, required
- `timelock` string
- `governor` string
- `vault` string
- `status` string
- `offset` integer
- `limit` integer

## Response `200`

Timelock operations

- object
  - `data` TimelockOperation[]
    - `chainId` integer, required
    - `timelock` string, required
    - `timelockKind` 'admin' | 'wildcard' | 'evault-factory', nullable, required: The admin or wildcard timelock of a suite, or the EVault factory timelock, which guards upgrades of the chain's EVK vaults.
    - `governor` string, nullable, required: The governor of the timelock's suite; null for the EVault factory timelock.
    - `operationId` string, required
    - `status` 'pending' | 'ready' | 'executed' | 'cancelled', required
    - `readyAt` string, required: Unix seconds from which the operation can execute (scheduling time plus `delay`).
    - `delay` string, required: Delay in seconds requested by the scheduling.
    - `predecessor` string, required: Operation that must execute first; zero for none.
    - `salt` string, nullable, required: Salt of the scheduling; null when the timelock emitted none (a zero salt).
    - `calls` TimelockOperationCall[], required
      - `index` string, required: Position in the scheduled batch; `0` for a single call.
      - `target` string, required
      - `value` string, required: Native value sent with the call, in wei.
      - `data` string, required: Calldata as scheduled, not decoded.
    - `scheduled` GovernanceEventRef, required
      - `blockNumber` string, required
      - `timestamp` string, date-time, required: Block timestamp.
      - `txHash` string, required
    - `executed` GovernanceEventRef, required
      - `blockNumber` string, required
      - `timestamp` string, date-time, required: Block timestamp.
      - `txHash` string, required
    - `cancelled` GovernanceEventRef, required
      - `blockNumber` string, required
      - `timestamp` string, date-time, required: Block timestamp.
      - `txHash` string, required
  - `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/timelock-operations/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)
