---
title: "Get Asset"
method: GET
path: "/v1/assets/{asset}"
tags: ["Assets"]
---

# Get Asset

`GET /v1/assets/{asset}`

## Request

- Base URL: `https://api.ensemble.markets` (the document declares no server; this is the origin it was published from)
- URL: `https://api.ensemble.markets/v1/assets/{asset}`
- Auth: HTTP bearer

The catalog record: wrapper, tax form, leverage, issuer, tags, country
and the date range of its bars. `price_coverage` separates the catalog
seed from stored bars. `tax_evidence` is unclassified when tax form and
legal structure are null, which is not a 1099. `country` is set when
the name states one country. `backfill` names your rule for the symbol,
when you have one, so a history that predates the listing is explained.
Whether a particular broker will accept a symbol is not tracked here.

## Path parameters

- `asset` string, required: Symbol (`AAPL`) or asset ID (`asset_...` or legacy `a-...`)

## Response `200`

Successful Response

- Asset: Full asset payload for GET-by-id/symbol. Same columns as a screener row, plus the whole data blob and the caller's backfill — both are per-asset reads, so neither belongs on a 500-row page.
  - `asset_class` string, nullable: equity, fixed_income, commodity, currency, alternatives, asset_allocation
  - `tags` string[]: Descriptive `dimension:value` tags, e.g. region:us, size:large, sector:energy, commodity:precious_metals, bond:high_yield, theme:gold_miners. Multi-valued because the facts are (a gold+miners fund carries both) and independent of the wrapper, so a 3x utilities fund still reads sector:utilities. Empty means unclassified.
  - `legal_structure` string, nullable: ric, uit, grantor_trust, commodity_pool, etn, closed_end_trust
  - `tax_form` string, nullable: 1099, k1, or pfic
  - `leverage` number, nullable: Signed target leverage multiple; reset frequency varies by product. SH = -1.0, UVXY = 1.5, DGP = 2.0
  - `issuer` string, nullable: Fund family / issuer name
  - `cik` string, nullable: SEC EDGAR CIK
  - `first_price_date` string, date, nullable: First daily bar. The stored history's first bar when bars are on file, otherwise the catalog seed. See price_coverage.
  - `last_price_date` string, date, nullable: Most recent daily bar: the later of the stored history edge and the catalog seed. price_coverage says which one you are looking at. An unread asset with no seed is null, which is not evidence of no prices.
  - `price_coverage` PriceCoverage, required: Seed dates versus the bars actually stored for this symbol.
    - `source` string, required: history | catalog | unread | empty
    - `fetched_at` string, date-time, nullable: When the stored bars were last written, if bars are on file
    - `history_first_price_date` string, date, nullable: First stored bar. Null when no bars are on file.
    - `history_last_price_date` string, date, nullable: Last stored bar. Null when no bars are on file.
    - `catalog_first_price_date` string, date, nullable: Catalog seed for the first bar, which can lag or lead the stored bars.
    - `catalog_last_price_date` string, date, nullable: Catalog seed for the last bar, which can lag or lead the stored bars.
    - `verification` string, required: How to read source. A seed is not a served edge.
  - `tax_evidence` TaxEvidence, required: Provenance for tax_form and legal_structure. Null columns are unclassified.
    - `status` string, required: classified | unverified | unclassified
    - `source` string, nullable: Classifier source. Required, with as_of, before status is classified.
    - `as_of` string, date, nullable: As-of date of the classification evidence. Null when unclassified.
    - `verification` string, required: Why this status was assigned. Unclassified is not 1099.
  - `country` string, nullable: Single-country mandate read from the name. Null when the name states a broader region, more than one country, or none. Funds that share a value are the same country exposure. Holdings are not consulted. The list filter names the accepted values.
  - `id` string, required: Asset ID (asset_... or legacy a-...)
  - `symbol` string, required
  - `name` string, required
  - `type` string, required: Asset type: etf | fund | stock | crypto
  - `exchange` string, required
  - `currency` string
  - `delisted` boolean
  - `updated_at` string, date-time, required
  - `data` object: Instrument-specific blob. List endpoints project this; GET returns it whole.
  - `backfill` AssetBackfill: The caller's history-extension rule for this symbol. Present on asset reads so an extended series is self-documenting: a 2x silver ETN listed in 2026 whose history starts in 2008 is a backfill, not corrupt data, and the reader should not have to infer that from a date.
    - `source_type` 'asset' | 'model', required
    - `source` string, required: Ticker or model ID supplying the history
    - `source_name` string, nullable: Display name of the source, when it has one
    - `splice_date` string, date, nullable: First bar of the symbol's own history. Everything before it comes from `source`, scaled to join continuously.

## Other responses

- `4XX`: The request was refused; `error.type` says why
- `5XX`: The server failed; quote `X-Request-Id` when reporting it

---

[API](https://skmtc.dev/ensemble/apis/ensemble-api.md) · [All operations](https://skmtc.dev/ensemble/apis/ensemble-api/llms.txt) · [OpenAPI document](https://skmtc.dev/ensemble/apis/ensemble-api/revisions/4c0fbd80c197?raw)
