Every API here is available over the APIs.io API and to AI agents over MCP.
openapi: 3.2.0
info:
version: 1.3.0
title: CryptoQuant Data ETH Fund Data API
termsOfService: https://cryptoquant.com/terms-of-service
contact:
name: API Support
email: contact@cryptoquant.com
description: The CryptoQuant Data API provides simple and powerful endpoints to get information on general transaction data and aggregate on-chain statistics straight from the blockchain. The API root endpoint URL is `https://api.cryptoquant.com/v1/`.
servers:
- url: https://api.cryptoquant.com/v1
description: Default server
tags:
- name: ETH Fund Data
description: 'This namespace cointains endpoints to retreive metrics related to regulated funds such as trust, including market price, market volume, market premium, and digital asset holdings. These metrics are useful to measure sentiments of investors such as institutions in regulated market. All Symbol will be updated no later then UTC 12:00, this may be changed depending on update time of source data. Also the return value may be changed because of late updated fund.
### Supported Symbols
| Name | Symbol | Status | Source |
|---------------------------------------|-------------|-------------|-----------------------|
| All Symbol (ETH) | `all_symbol`| Validated | All Fund |
| Grayscale Ethereum Trust (ETHE) | `ethe` | Validated | Grayscale Investments |
| Grayscale Ethereum Mini Trust (ETH) | `eth` | Validated | Grayscale Investments |
| iShares Ethereum Trust ETF (ETHA) | `etha` | Validated | BlackRock |
| Fidelity Ethereum Fund ETF (FETH) | `feth` | Validated | Fidelity |
| Bitwise Ethereum ETF (ETHW) | `ethw` | Validated | Bitwise |
| 21Shares Ethereum Core ETP (CETH) | `ceth` | Validated | 21Shares |
| Invesco Galaxy Ethereum ETF (QETH) | `qeth` | Validated | Invesco |
| VanEck Ethereum ETF (ETHV) | `ethv` | Validated | VanEck |
| Franklin Ethereum ETF (EZET) | `ezet` | Validated | Franklin Templeton |
| Purpose Ether ETF (ETHH.U) | `ethh_u` | Validated | Purpose Investments |'
paths:
/eth/fund-data/market-price-usd:
get:
tags:
- ETH Fund Data
summary: Market Price USD
description: 'The price of certain symbol (e.g. ethe) managed by each fund (e.g. Grayscale) reflects sentiment of investors in regulated markets. In this specific case, having single share of ETHE means having approximately 0.01 ETH invested to Grayscale. This endpoint returns metrics related to the US Dollar(USD) price of fund related stocks (e.g. ethe). We provide five metrics, `price_usd_open`, USD opening price at the beginning of the window, `price_usd_close`, USD closing price at the end of the window, `price_usd_high`, the highest USD price in a given window, `price_usd_low`, the lowest USD price in a given window, and `price_usd_adj_close`, USD adjusted closing price at the end of the window. All Symbol is not supported.
**📖 Data Guide:** Grayscale Ethereum Trust (ETHE) — definition, interpretation, and chart examples.'
operationId: getETHMarketPriceUSD
parameters:
- description: A stock symbol (ticker) from the table that we support. [See here](#tag/ETH-Fund-Data)
explode: false
in: query
name: symbol
required: true
schema:
type: string
style: form
example: ethe
- description: Currently, we only support `day`.
explode: false
in: query
name: window
schema:
type: string
default: day
style: form
example: day
- description: This defines the starting time for which data will be gathered, formatted as YYYYMMDDTHHMMSS (indicating YYYY-MM-DDTHH:MM:SS, UTC time). If window=day is used, it can also be formatted as YYYYMMDD (date). If window=block is used, you can also specify the exact block height (e.g. 510000). If this field is not specified, response will include data from the earliest time.
explode: false
in: query
name: from
required: false
schema:
type: string
style: form
example: 20191001T100000
- description: This defines the ending time for which data will be gathered, formatted as YYYYMMDDTHHMMSS (indicating YYYY-MM-DDTHH:MM:SS, UTC time). If window=day is used, it can also be formatted as YYYYMMDD (date). If window=block is used, you can also specify the exact block height (e.g. 510000). If this field is not specified, response will include data from the latest time.
explode: false
in: query
name: to
required: false
schema:
type: string
style: form
example: 20191001T103025
- description: The maximum number of entries to return before the latest data point (or before `to` if specified). This field ranges from 1 to 100,000.
explode: false
in: query
name: limit
required: false
schema:
type: integer
default: 100
minimum: 1
maximum: 100000
style: form
example: 100
- description: A format type about return message type. Supported formats are json, csv.
explode: false
in: query
name: format
required: false
schema:
type: string
default: json
style: form
example: json
x-codeSamples:
- lang: Shell
source: 'curl -X GET "https://api.cryptoquant.com/v1/eth/fund-data/market-price-usd?symbol=ethe&window=day&from=20191001&limit=2" \
-H "Authorization: Bearer <YOUR_API_KEY>"'
- lang: JavaScript
source: "fetch(\"https://api.cryptoquant.com/v1/eth/fund-data/market-price-usd?symbol=ethe&window=day&from=20191001&limit=2\", { headers: { \"Authorization\": \"Bearer <YOUR_API_KEY>\"} })\n .then(response => response.json())\n .then(data => console.log(data))"
- lang: NodeJS
source: "require('axios')\n .get(\"https://api.cryptoquant.com/v1/eth/fund-data/market-price-usd?symbol=ethe&window=day&from=20191001&limit=2\", { headers: { Authorization: 'Bearer <YOUR_API_KEY>' } })\n .then(response => console.log(response))"
- lang: Ruby
source: 'require ''net/http''
uri = URI("https://api.cryptoquant.com/v1/eth/fund-data/market-price-usd?symbol=ethe&window=day&from=20191001&limit=2")
req = Net::HTTP::Get.new(uri)
req["Authorization"] = "Bearer <YOUR_API_KEY>"
res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |http| http.request(req) }
puts res.body'
- lang: Python
source: 'import requests
headers = {''Authorization'': ''Bearer <YOUR_API_KEY>''}
url = "https://api.cryptoquant.com/v1/eth/fund-data/market-price-usd?symbol=ethe&window=day&from=20191001&limit=2"
print(requests.get(url, headers=headers).json())'
responses:
'200':
description: Market Price OHLC and adjusted C Data in USD
content:
application/json:
schema:
type: object
required:
- status
- result
properties:
status:
type: object
description: The status object is return with most of requests and indicates if the request was successful. If it is not successful, error information is included.
properties:
code:
type: integer
format: int32
description: HTTP status code
message:
type: string
description: Text description of the error or success.
required:
- code
- message
result:
type: object
required:
- window
- data
properties:
window:
type: string
description: The size of window. This metric supports only day resolution.
data:
type: array
items:
type: object
required:
- price_usd_open
- price_usd_high
- price_usd_low
- price_usd_close
- price_usd_adj_close
properties:
date:
type: string
description: The date in YYYY-DD-MM. This optional field only appears when window=day is used.
price_usd_open:
type: number
description: USD opening price at the beginning of the window.
price_usd_high:
type: number
description: The highest USD price in a given window.
price_usd_low:
type: number
description: The lowest USD price in a given window.
price_usd_close:
type: number
description: USD closing price at the end of the window.
price_usd_adj_close:
type: number
description: USD adjusted closing price at the end of the window.
example:
status:
code: 200
message: success
result:
window: day
data:
- date: '2026-06-12'
price_usd_open: 13.47
price_usd_high: 13.68
price_usd_low: 13.36
price_usd_close: 13.47
price_usd_adj_close: 13.47
- date: '2026-06-11'
price_usd_open: 13.32
price_usd_high: 13.68
price_usd_low: 13.19
price_usd_close: 13.6
price_usd_adj_close: 13.6
security:
- AccessToken: []
/eth/fund-data/market-volume:
get:
tags:
- ETH Fund Data
summary: Market Volume
description: 'The volume of certain symbol (e.g. ethe) managed by each fund (e.g. Grayscale) reflects sentiment of investors in regulated markets. This endpoint returns traded volume of fund related stocks (e.g. ethe). At this endpoint, metrics are calculated by Day. We provide one metric, `volume`, traded volume of the window.
**📖 Data Guide:** Grayscale Ethereum Trust (ETHE) — definition, interpretation, and chart examples.'
operationId: getETHMarketVolume
parameters:
- description: A stock symbol (ticker) from the table that we support. [See here](#tag/ETH-Fund-Data)
explode: false
in: query
name: symbol
required: true
schema:
type: string
style: form
example: ethe
- description: Currently, we only support `day`.
explode: false
in: query
name: window
schema:
type: string
default: day
style: form
example: day
- description: This defines the starting time for which data will be gathered, formatted as YYYYMMDDTHHMMSS (indicating YYYY-MM-DDTHH:MM:SS, UTC time). If window=day is used, it can also be formatted as YYYYMMDD (date). If window=block is used, you can also specify the exact block height (e.g. 510000). If this field is not specified, response will include data from the earliest time.
explode: false
in: query
name: from
required: false
schema:
type: string
style: form
example: 20191001T100000
- description: This defines the ending time for which data will be gathered, formatted as YYYYMMDDTHHMMSS (indicating YYYY-MM-DDTHH:MM:SS, UTC time). If window=day is used, it can also be formatted as YYYYMMDD (date). If window=block is used, you can also specify the exact block height (e.g. 510000). If this field is not specified, response will include data from the latest time.
explode: false
in: query
name: to
required: false
schema:
type: string
style: form
example: 20191001T103025
- description: The maximum number of entries to return before the latest data point (or before `to` if specified). This field ranges from 1 to 100,000.
explode: false
in: query
name: limit
required: false
schema:
type: integer
default: 100
minimum: 1
maximum: 100000
style: form
example: 100
- description: A format type about return message type. Supported formats are json, csv.
explode: false
in: query
name: format
required: false
schema:
type: string
default: json
style: form
example: json
x-codeSamples:
- lang: Shell
source: 'curl -X GET "https://api.cryptoquant.com/v1/eth/fund-data/market-volume?symbol=ethe&window=day&from=20191001&limit=2" \
-H "Authorization: Bearer <YOUR_API_KEY>"'
- lang: JavaScript
source: "fetch(\"https://api.cryptoquant.com/v1/eth/fund-data/market-volume?symbol=ethe&window=day&from=20191001&limit=2\", { headers: { \"Authorization\": \"Bearer <YOUR_API_KEY>\"} })\n .then(response => response.json())\n .then(data => console.log(data))"
- lang: NodeJS
source: "require('axios')\n .get(\"https://api.cryptoquant.com/v1/eth/fund-data/market-volume?symbol=ethe&window=day&from=20191001&limit=2\", { headers: { Authorization: 'Bearer <YOUR_API_KEY>' } })\n .then(response => console.log(response))"
- lang: Ruby
source: 'require ''net/http''
uri = URI("https://api.cryptoquant.com/v1/eth/fund-data/market-volume?symbol=ethe&window=day&from=20191001&limit=2")
req = Net::HTTP::Get.new(uri)
req["Authorization"] = "Bearer <YOUR_API_KEY>"
res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |http| http.request(req) }
puts res.body'
- lang: Python
source: 'import requests
headers = {''Authorization'': ''Bearer <YOUR_API_KEY>''}
url = "https://api.cryptoquant.com/v1/eth/fund-data/market-volume?symbol=ethe&window=day&from=20191001&limit=2"
print(requests.get(url, headers=headers).json())'
responses:
'200':
description: Market Volume Data
content:
application/json:
schema:
type: object
required:
- status
- result
properties:
status:
type: object
description: The status object is return with most of requests and indicates if the request was successful. If it is not successful, error information is included.
properties:
code:
type: integer
format: int32
description: HTTP status code
message:
type: string
description: Text description of the error or success.
required:
- code
- message
result:
type: object
required:
- window
- data
properties:
window:
type: string
description: The size of window. This metric supports only day resolution.
data:
type: array
items:
type: object
required:
- volume
properties:
date:
type: string
description: The date in YYYY-DD-MM. This optional field only appears when window=day is used.
volume:
type: number
description: Traded volume of the window.
example:
status:
code: 200
message: success
result:
window: day
data:
- date: '2026-06-12'
volume: 2224300
- date: '2026-06-11'
volume: 3225300
security:
- AccessToken: []
/eth/fund-data/market-premium:
get:
tags:
- ETH Fund Data
summary: Market Premium
description: 'The premium of certain symbol (e.g. ethe) is defined as (market price of the symbol - NAV) divided by NAV where NAV (Native Asset Value) is the current value of holdings (e.g. ETH price multiplied by ETH per Share). Higher the premium indicates market bullish, which also indicates downside risk. On the other hand, lower the premium indicates market bearish, which also indicates upside risk. All Symbol market premium is calculated by taking VWAP (Volume Weighted Average Ratio) of each fund data volume (usd).
**📖 Data Guide:** ETHE Premium or Discount — definition, interpretation, and chart examples.'
operationId: getETHMarketPremium
parameters:
- description: A stock symbol (ticker) from the table that we support. [See here](#tag/ETH-Fund-Data)
explode: false
in: query
name: symbol
required: true
schema:
type: string
style: form
example: ethe
- description: Currently, we only support `day`.
explode: false
in: query
name: window
schema:
type: string
default: day
style: form
example: day
- description: This defines the starting time for which data will be gathered, formatted as YYYYMMDDTHHMMSS (indicating YYYY-MM-DDTHH:MM:SS, UTC time). If window=day is used, it can also be formatted as YYYYMMDD (date). If window=block is used, you can also specify the exact block height (e.g. 510000). If this field is not specified, response will include data from the earliest time.
explode: false
in: query
name: from
required: false
schema:
type: string
style: form
example: 20191001T100000
- description: This defines the ending time for which data will be gathered, formatted as YYYYMMDDTHHMMSS (indicating YYYY-MM-DDTHH:MM:SS, UTC time). If window=day is used, it can also be formatted as YYYYMMDD (date). If window=block is used, you can also specify the exact block height (e.g. 510000). If this field is not specified, response will include data from the latest time.
explode: false
in: query
name: to
required: false
schema:
type: string
style: form
example: 20191001T103025
- description: The maximum number of entries to return before the latest data point (or before `to` if specified). This field ranges from 1 to 100,000.
explode: false
in: query
name: limit
required: false
schema:
type: integer
default: 100
minimum: 1
maximum: 100000
style: form
example: 100
- description: A format type about return message type. Supported formats are json, csv.
explode: false
in: query
name: format
required: false
schema:
type: string
default: json
style: form
example: json
x-codeSamples:
- lang: Shell
source: 'curl -X GET "https://api.cryptoquant.com/v1/eth/fund-data/market-premium?symbol=ethe&window=day&from=20191001&limit=2" \
-H "Authorization: Bearer <YOUR_API_KEY>"'
- lang: JavaScript
source: "fetch(\"https://api.cryptoquant.com/v1/eth/fund-data/market-premium?symbol=ethe&window=day&from=20191001&limit=2\", { headers: { \"Authorization\": \"Bearer <YOUR_API_KEY>\"} })\n .then(response => response.json())\n .then(data => console.log(data))"
- lang: NodeJS
source: "require('axios')\n .get(\"https://api.cryptoquant.com/v1/eth/fund-data/market-premium?symbol=ethe&window=day&from=20191001&limit=2\", { headers: { Authorization: 'Bearer <YOUR_API_KEY>' } })\n .then(response => console.log(response))"
- lang: Ruby
source: 'require ''net/http''
uri = URI("https://api.cryptoquant.com/v1/eth/fund-data/market-premium?symbol=ethe&window=day&from=20191001&limit=2")
req = Net::HTTP::Get.new(uri)
req["Authorization"] = "Bearer <YOUR_API_KEY>"
res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |http| http.request(req) }
puts res.body'
- lang: Python
source: 'import requests
headers = {''Authorization'': ''Bearer <YOUR_API_KEY>''}
url = "https://api.cryptoquant.com/v1/eth/fund-data/market-premium?symbol=ethe&window=day&from=20191001&limit=2"
print(requests.get(url, headers=headers).json())'
responses:
'200':
description: Market Premium Data
content:
application/json:
schema:
type: object
required:
- status
- result
properties:
status:
type: object
description: The status object is return with most of requests and indicates if the request was successful. If it is not successful, error information is included.
properties:
code:
type: integer
format: int32
description: HTTP status code
message:
type: string
description: Text description of the error or success.
required:
- code
- message
result:
type: object
required:
- window
- data
properties:
window:
type: string
description: The size of window. This metric supports only day resolution.
data:
type: array
items:
type: object
required:
- market_premium
properties:
date:
type: string
description: The date in YYYY-DD-MM. This optional field only appears when window=day is used.
market_premium:
type: number
description: Market premium of the window.
example:
status:
code: 200
message: success
result:
window: day
data:
- date: '2019-10-02'
market_premium: null
- date: '2019-10-01'
market_premium: null
security:
- AccessToken: []
/eth/fund-data/digital-asset-holdings:
get:
tags:
- ETH Fund Data
summary: Digital Asset Holdings
description: 'This endpoint returns digital asset holdings status of each fund. For example, Grayscale ETH Holdings along with ETHE represents how much ETH Grayscale is holding for its investment. This metric indicates stock market''s sentiment where higher the value means bullish sentiment of investors in stock market.
**📖 Data Guide:** ETHE Digital Asset Holdings — definition, interpretation, and chart examples.'
operationId: getETHDigitalAssetHoldings
parameters:
- description: A stock symbol (ticker) from the table that we support. [See here](#tag/ETH-Fund-Data)
explode: false
in: query
name: symbol
required: true
schema:
type: string
style: form
example: ethe
- description: Currently, we only support `day`.
explode: false
in: query
name: window
schema:
type: string
default: day
style: form
example: day
- description: This defines the starting time for which data will be gathered, formatted as YYYYMMDDTHHMMSS (indicating YYYY-MM-DDTHH:MM:SS, UTC time). If window=day is used, it can also be formatted as YYYYMMDD (date). If window=block is used, you can also specify the exact block height (e.g. 510000). If this field is not specified, response will include data from the earliest time.
explode: false
in: query
name: from
required: false
schema:
type: string
style: form
example: 20191001T100000
- description: This defines the ending time for which data will be gathered, formatted as YYYYMMDDTHHMMSS (indicating YYYY-MM-DDTHH:MM:SS, UTC time). If window=day is used, it can also be formatted as YYYYMMDD (date). If window=block is used, you can also specify the exact block height (e.g. 510000). If this field is not specified, response will include data from the latest time.
explode: false
in: query
name: to
required: false
schema:
type: string
style: form
example: 20191001T103025
- description: The maximum number of entries to return before the latest data point (or before `to` if specified). This field ranges from 1 to 100,000.
explode: false
in: query
name: limit
required: false
schema:
type: integer
default: 100
minimum: 1
maximum: 100000
style: form
example: 100
- description: A format type about return message type. Supported formats are json, csv.
explode: false
in: query
name: format
required: false
schema:
type: string
default: json
style: form
example: json
x-codeSamples:
- lang: Shell
source: 'curl -X GET "https://api.cryptoquant.com/v1/eth/fund-data/digital-asset-holdings?symbol=ethe&window=day&from=20191001&limit=2" \
-H "Authorization: Bearer <YOUR_API_KEY>"'
- lang: JavaScript
source: "fetch(\"https://api.cryptoquant.com/v1/eth/fund-data/digital-asset-holdings?symbol=ethe&window=day&from=20191001&limit=2\", { headers: { \"Authorization\": \"Bearer <YOUR_API_KEY>\"} })\n .then(response => response.json())\n .then(data => console.log(data))"
- lang: NodeJS
source: "require('axios')\n .get(\"https://api.cryptoquant.com/v1/eth/fund-data/digital-asset-holdings?symbol=ethe&window=day&from=20191001&limit=2\", { headers: { Authorization: 'Bearer <YOUR_API_KEY>' } })\n .then(response => console.log(response))"
- lang: Ruby
source: 'require ''net/http''
uri = URI("https://api.cryptoquant.com/v1/eth/fund-data/digital-asset-holdings?symbol=ethe&window=day&from=20191001&limit=2")
req = Net::HTTP::Get.new(uri)
req["Authorization"] = "Bearer <YOUR_API_KEY>"
res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |http| http.request(req) }
puts res.body'
- lang: Python
source: 'import requests
headers = {''Authorization'': ''Bearer <YOUR_API_KEY>''}
url = "https://api.cryptoquant.com/v1/eth/fund-data/digital-asset-holdings?symbol=ethe&window=day&from=20191001&limit=2"
print(requests.get(url, headers=headers).json())'
responses:
'200':
description: Digital Asset Holdings Data
content:
application/json:
schema:
type: object
required:
- status
- result
properties:
status:
type: object
description: The status object is return with most of requests and indicates if the request was successful. If it is not successful, error information is included.
properties:
code:
type: integer
format: int32
description: HTTP status code
message:
type: string
description: Text description of the error or success.
required:
- code
- message
result:
type: object
required:
- window
- data
properties:
window:
type: string
description: The size of window. This metric supports only day resolution.
data:
type: array
items:
type: object
required:
- digital_asset_holdings
properties:
date:
type: string
description: The date in YYYY-DD-MM. This optional field only appears when window=day is used.
digital_asset_holdings:
type: number
description: Digital Asset Holdings of the window.
example:
status:
code: 200
message: success
result:
window: day
data:
- date: '2026-06-12'
digital_asset_holdings: 808607.78
- date: '2026-06-11'
digital_asset_holdings: 813141.15
security:
- AccessToken: []
components:
securitySchemes:
AccessToken:
type: http
scheme: bearer
bearerFormat: JWT
description: 'For each API request, include this HTTP header:
`Authorization` with the `Bearer <YOUR_API_KEY>`. Bearer access token is the type of HTTP Authorization. You have to include access token to the HTTP header and note that leading bearer is required.
You must include your access token in HTTP header in every request you make. The token is unique, issued for each client, and regularly changed(once a year). To obtain an access token, please [upgrade your plan](https://cryptoquant.com/pricing) to Professional or Premium plan. You''ll be able to see your access token on the [API tab](https://cryptoquant.com/settings/api) of your profile page after the subscription.'
QueryParameter:
type: apiKey
name: api_key
in: query
description: 'For each API reqeust, include `api_key` parameter.
You must request with your access token in query parameter in every request you make. The token is unique, issued for each client, and regularly changed(once a year). To obtain an access token, please [upgrade your plan](https://cryptoquant.com/pricing) to Professional or Premium plan. You''ll be able to see your access token on the [API tab](https://cryptoquant.com/settings/api) of your profile page after the subscription.
If you are using Excel, you can use the `api_key` parameter to request with your access token to return data either in `json` or `csv`.'
x-tagGroups:
- name: Discovery
tags:
- Available Endpoints
- Supported Stablecoin List
- Supported ERC20 List
- Supported Alt List
- name: Bitcoin
tags:
- BTC Entity Status
- BTC Exchange Flows
- BTC Flow Indicator
- BTC Market Indicator
# --- truncated at 32 KB (33 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/cryptoquant/refs/heads/main/openapi/cryptoquant-eth-fund-data-api-openapi.yml