---
title: "Get curation product"
method: GET
path: "/v3/products/{chainId}/{id}"
tags: ["Labeling Curation"]
---

# Get curation product

`GET /v3/products/{chainId}/{id}`

Publicly reads the product and its vault rows from the latest published snapshot by default. Explicit `current` or `draft` reads expose the mutable working copy. Platform operators can read every entity; entity-member sessions are restricted to products owned by their entity.

## Path parameters

- `chainId` integer, required
- `id` string, required

## Query parameters

- `labelSet` string
- `version` string
- `view` 'curation' | 'resolved'

## Response `200`

Product with associated vault labels. Shapes follow the `view` parameter.

- object
  - `data` union, required
    - object
      - `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
      - `portfolioNotice` string, nullable
      - `isDeprecated` boolean, required
      - `deprecationReason` string, nullable
      - `governanceMode` 'governed' | 'ungoverned' | 'unknown', required — Server-derived from the current governance state of member vaults. Empty products are unknown.
      - `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
      - `vaults` union[], required
        - union
          - CurationVault
            - `chainId` integer, required
            - `address` string, required
            - `vaultType` 'evk' | 'earn' | 'securitize' | 'escrow', required — Vault family derived from indexed discovery or the escrow registration path.
            - `productId` string, nullable
            - `entityId` string, nullable — Entity associated through verified on-chain ownership, or null for unclaimed and escrow vaults.
            - `name` string, nullable
            - `description` string, nullable
            - `portfolioNotice` string, nullable
            - `isDeprecated` boolean, required
            - `deprecationReason` string, nullable
            - `tags` string[], required — Union of entity-managed label tags and platform-managed assessment tags.
            - `campaigns` CurationCampaign[], nullable
              - …
            - `resolved` ResolvedVaultLabels, required — Read-time display cascade (vault label, else product, else indexed on-chain identity; escrow vaults get a fixed name). Raw fields stay authoritative for editing — this block is derived and never stored.
              - …
            - `createdAt` string, date-time, required
            - `updatedAt` string, date-time, required
          - ResolvedCurationVaultView — Consumer-facing vault-label shape (`view=resolved`) — the display cascade flattened to the top level; raw label fields are omitted. entityId and deprecation are the resolved values with product inheritance applied.
            - `chainId` integer, required
            - `address` string, required
            - `vaultType` 'evk' | 'earn' | 'securitize' | 'escrow', required
            - `productId` string, nullable, required
            - `entityId` string, nullable, required
            - `name` string, nullable, required
            - `description` string, nullable, required
            - `portfolioNotice` string, nullable, required
            - `deprecated` boolean, required
            - `deprecationReason` string, nullable, required
            - `url` string, nullable, required
            - `logo` string, nullable, required
            - `tags` string[], required
            - `campaigns` CurationCampaign[], nullable, required
              - …
            - `createdAt` string, date-time, required
            - `updatedAt` string, date-time, required
    - object — Consumer-facing product shape (`view=resolved`) — entity fallbacks applied to url and logo, entityName included, resolved wrapper omitted.
      - `id` string, required
      - `chainId` integer, required
      - `entityId` string, required
      - `entityName` string, nullable, required
      - `coBrandEntityIds` string[], required
      - `name` string, required
      - `logo` string, nullable, required
      - `description` string, nullable, required
      - `url` string, nullable, required
      - `portfolioNotice` string, nullable, required
      - `isDeprecated` boolean, required
      - `deprecationReason` string, nullable, required
      - `governanceMode` 'governed' | 'ungoverned' | 'unknown', required
      - `anyExplorableLend` boolean, required
      - `anyExplorableBorrow` boolean, required
      - `createdAt` string, date-time, required
      - `updatedAt` string, date-time, required
      - `vaults` union[], required
        - union
          - CurationVault
            - `chainId` integer, required
            - `address` string, required
            - `vaultType` 'evk' | 'earn' | 'securitize' | 'escrow', required — Vault family derived from indexed discovery or the escrow registration path.
            - `productId` string, nullable
            - `entityId` string, nullable — Entity associated through verified on-chain ownership, or null for unclaimed and escrow vaults.
            - `name` string, nullable
            - `description` string, nullable
            - `portfolioNotice` string, nullable
            - `isDeprecated` boolean, required
            - `deprecationReason` string, nullable
            - `tags` string[], required — Union of entity-managed label tags and platform-managed assessment tags.
            - `campaigns` CurationCampaign[], nullable
              - …
            - `resolved` ResolvedVaultLabels, required — Read-time display cascade (vault label, else product, else indexed on-chain identity; escrow vaults get a fixed name). Raw fields stay authoritative for editing — this block is derived and never stored.
              - …
            - `createdAt` string, date-time, required
            - `updatedAt` string, date-time, required
          - ResolvedCurationVaultView — Consumer-facing vault-label shape (`view=resolved`) — the display cascade flattened to the top level; raw label fields are omitted. entityId and deprecation are the resolved values with product inheritance applied.
            - `chainId` integer, required
            - `address` string, required
            - `vaultType` 'evk' | 'earn' | 'securitize' | 'escrow', required
            - `productId` string, nullable, required
            - `entityId` string, nullable, required
            - `name` string, nullable, required
            - `description` string, nullable, required
            - `portfolioNotice` string, nullable, required
            - `deprecated` boolean, required
            - `deprecationReason` string, nullable, required
            - `url` string, nullable, required
            - `logo` string, nullable, required
            - `tags` string[], required
            - `campaigns` CurationCampaign[], nullable, required
              - …
            - `createdAt` string, date-time, required
            - `updatedAt` string, date-time, required
  - `meta` PaginationMeta, required
    - `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.
    - `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.

## Other responses

- `400` — Bad request
- `401` — Unauthorized
- `403` — Forbidden
- `404` — Not found

---

[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-service-production.skmtc.workers.dev/v1/apis/euler/euler-data-api-v3/revisions/9573a5fbd4a6/schema)
