Every API here is available over the APIs.io API and to AI agents over MCP.
openapi: 3.2.0
info:
description: The Blockworks Data API is a unified, read-only REST interface to Blockworks' warehouse-modeled crypto dataset, powered by Messari's research and data infrastructure.
title: Blockworks Data Markets API
version: 0.1.0
servers:
- description: Blockworks API
url: https://api.blockworks.com
security:
- apiKey: []
tags:
- description: 'Models documented under Markets: Market (BQEN) (timeseries).'
name: Markets
paths:
/query/timeseries/bqen/{granularity}:
get:
description: 'Price and volume candles for a trading pair on one exchange: open, high, low, close and volume, in USD and in the raw quote currency. Each series is one market, keyed by its market id.'
operationId: getTimeseries_bqen
parameters:
- description: Data granularity.
in: path
name: granularity
required: true
schema:
enum:
- 5m
- 1h
- 1d
- 1w
type: string
- description: 'Comma-separated Market ID values naming the series to return (up to 10). Required: this model has too many series to return at once.'
in: query
name: series
required: true
schema:
type: string
- description: 'Time window, one of: to-date (ytd, qtd, mtd, dtd, htd); relative, <n> followed by m, h, d or w (30d, 12h, 4w; 1y and 1M are not accepted, use 365d, 52w, ytd or a calendar year); a calendar day (YYYY-MM-DD), month (YYYY-MM) or year (YYYY); or an RFC3339 instant, which runs from then to now. Mutually exclusive with start/end. Default: everything retained, up to now.'
in: query
name: timeframe
schema:
type: string
- description: 'Window start, inclusive (RFC3339, unix seconds, or YYYY-MM-DD). Default: unbounded.'
in: query
name: start
schema:
type: string
- description: 'Window end, exclusive (RFC3339, unix seconds, or YYYY-MM-DD). Default: now.'
in: query
name: end
schema:
type: string
- description: If true, return only the first and last point of the resolved time window instead of every point in it.
in: query
name: bounds
schema:
type: boolean
- description: Comma-separated metric fields to return; defaults to every metric. A point always leads with its timestamp, and the values that follow are described by point_schema in catalog order regardless of the order requested here.
in: query
name: selections
schema:
items:
enum:
- open-price
- open-price-raw
- high-price
- high-price-raw
- low-price
- low-price-raw
- close-price
- close-price-raw
- volume
- volume-raw
type: string
type: array
- description: 'Response format, overriding the Accept header: json (default), csv, or jsonl (NDJSON). csv and jsonl return the rows as a downloadable file.'
in: query
name: acceptFormat
schema:
default: json
enum:
- json
- csv
- jsonl
type: string
responses:
'200':
content:
application/json:
example:
data:
point_schema:
- description: Timestamp of the data point.
field: time
name: Time
time: true
type: time
- description: USD price at the candle open.
field: open-price
name: Open Price
time: false
type: float64
unit: usd
- description: Raw price at the candle open.
field: open-price-raw
name: Open Price Raw
time: false
type: float64
unit: usd
series:
- entity:
baseAssetSymbol: <baseAssetSymbol>
exchangeName: <exchangeName>
quoteAssetSymbol: <quoteAssetSymbol>
key: <Market ID>
points:
- - 1704067200
- 123.45
- 123.45
error: null
schema:
properties:
data:
$ref: '#/components/schemas/BqenData'
error:
type:
- string
- 'null'
required:
- data
type: object
application/x-ndjson:
schema:
description: JSON Lines (NDJSON); one JSON object per line.
type: string
text/csv:
schema:
description: CSV with a header row; one row per record.
type: string
description: Timeseries points for each series.
'400':
content:
application/json:
example:
data: null
error: 'too many series requested: 11 exceeds the maximum of 10'
schema:
$ref: '#/components/schemas/ErrorResponse'
description: 'The request is malformed: an empty, duplicated or too long series list (at most 10 keys), an unknown query parameter, an unrecognized timeframe (1y and 1M are not accepted; use 365d, 52w, ytd or a calendar year), timeframe combined with start or end, an unknown selections field, or an invalid bounds or acceptFormat value.'
'401':
content:
application/json:
example:
data: null
error: this model requires authentication
schema:
$ref: '#/components/schemas/ErrorResponse'
description: No API key was sent and the model requires one.
'403':
content:
application/json:
example:
data: null
error: this model requires the "market_data_unified" permission
schema:
$ref: '#/components/schemas/ErrorResponse'
description: The API key is not valid, or does not hold the "market_data_unified" permission.
'404':
content:
application/json:
example:
data: null
error: the all-series endpoint is not available for model "bqen"; request specific series via ?series or a series-key path
schema:
$ref: '#/components/schemas/ErrorResponse'
description: 'The series parameter was omitted: this model does not return every series at once, so name the ones you want. Also returned when the path names a model that does not exist or a granularity the model is not available at.'
summary: Batch Get Market timeseries
tags:
- Markets
x-badges:
- color: '#7c3aed'
name: market_data_unified
position: after
x-mint:
metadata:
sidebarTitle: Batch Get Market timeseries
title: Batch Get Market timeseries
x-series-key-entity: core-metrics-markets
/query/timeseries/bqen/{granularity}/{id}:
get:
description: 'Price and volume candles for a trading pair on one exchange: open, high, low, close and volume, in USD and in the raw quote currency. Each series is one market, keyed by its market id.'
operationId: getTimeseriesSeries_bqen
parameters:
- description: Data granularity.
in: path
name: granularity
required: true
schema:
enum:
- 5m
- 1h
- 1d
- 1w
type: string
- description: 'The Market ID identifying the series. A key no series has is not an error: the response carries an empty points array.'
in: path
name: id
required: true
schema:
type: string
- description: 'Time window, one of: to-date (ytd, qtd, mtd, dtd, htd); relative, <n> followed by m, h, d or w (30d, 12h, 4w; 1y and 1M are not accepted, use 365d, 52w, ytd or a calendar year); a calendar day (YYYY-MM-DD), month (YYYY-MM) or year (YYYY); or an RFC3339 instant, which runs from then to now. Mutually exclusive with start/end. Default: everything retained, up to now.'
in: query
name: timeframe
schema:
type: string
- description: 'Window start, inclusive (RFC3339, unix seconds, or YYYY-MM-DD). Default: unbounded.'
in: query
name: start
schema:
type: string
- description: 'Window end, exclusive (RFC3339, unix seconds, or YYYY-MM-DD). Default: now.'
in: query
name: end
schema:
type: string
- description: If true, return only the first and last point of the resolved time window instead of every point in it.
in: query
name: bounds
schema:
type: boolean
- description: Comma-separated metric fields to return; defaults to every metric. A point always leads with its timestamp, and the values that follow are described by point_schema in catalog order regardless of the order requested here.
in: query
name: selections
schema:
items:
enum:
- open-price
- open-price-raw
- high-price
- high-price-raw
- low-price
- low-price-raw
- close-price
- close-price-raw
- volume
- volume-raw
type: string
type: array
- description: 'Response format, overriding the Accept header: json (default), csv, or jsonl (NDJSON). csv and jsonl return the rows as a downloadable file.'
in: query
name: acceptFormat
schema:
default: json
enum:
- json
- csv
- jsonl
type: string
responses:
'200':
content:
application/json:
example:
data:
entity:
baseAssetSymbol: <baseAssetSymbol>
exchangeName: <exchangeName>
quoteAssetSymbol: <quoteAssetSymbol>
key: <Market ID>
point_schema:
- description: Timestamp of the data point.
field: time
name: Time
time: true
type: time
- description: USD price at the candle open.
field: open-price
name: Open Price
time: false
type: float64
unit: usd
- description: Raw price at the candle open.
field: open-price-raw
name: Open Price Raw
time: false
type: float64
unit: usd
points:
- - 1704067200
- 123.45
- 123.45
error: null
schema:
properties:
data:
$ref: '#/components/schemas/BqenSeriesData'
error:
type:
- string
- 'null'
required:
- data
type: object
application/x-ndjson:
schema:
description: JSON Lines (NDJSON); one JSON object per line.
type: string
text/csv:
schema:
description: CSV with a header row; one row per record.
type: string
description: Timeseries points for the series.
'400':
content:
application/json:
example:
data: null
error: 'unrecognized timeframe "1y": expected ytd|qtd|mtd|dtd|htd, <n>m|h|d|w, YYYY-MM-DD, YYYY-MM, YYYY, or RFC3339'
schema:
$ref: '#/components/schemas/ErrorResponse'
description: 'The request is malformed: an unknown query parameter, an unrecognized timeframe (1y and 1M are not accepted; use 365d, 52w, ytd or a calendar year), timeframe combined with start or end, a start after the end, an unknown selections field, or an invalid bounds or acceptFormat value.'
'401':
content:
application/json:
example:
data: null
error: this model requires authentication
schema:
$ref: '#/components/schemas/ErrorResponse'
description: No API key was sent and the model requires one.
'403':
content:
application/json:
example:
data: null
error: this model requires the "market_data_unified" permission
schema:
$ref: '#/components/schemas/ErrorResponse'
description: The API key is not valid, or does not hold the "market_data_unified" permission.
'404':
content:
application/json:
example:
data: null
error: 'model "bqen" does not support granularity "1h" (supported: 5m, 1h, 1d, 1w)'
schema:
$ref: '#/components/schemas/ErrorResponse'
description: 'The path names a model that does not exist ("no timeseries model ..."), or a granularity the model is not available at. An unknown series key is not a 404: it returns 200 with an empty points array.'
summary: Get Market timeseries
tags:
- Markets
x-badges:
- color: '#7c3aed'
name: market_data_unified
position: after
x-mint:
metadata:
sidebarTitle: Get Market timeseries
title: Get Market timeseries
x-series-key-entity: core-metrics-markets
components:
schemas:
ErrorResponse:
properties:
data:
description: Always null on an error.
type:
- object
- 'null'
error:
description: What went wrong, in one sentence.
type: string
required:
- error
- data
type: object
BqenSeriesData:
properties:
entity:
description: Information about what the series key identifies, from the "core-metrics-markets" model.
properties:
baseAssetSymbol:
description: The ticker symbol of the market's base asset.
type:
- string
- 'null'
exchangeName:
description: The name of the exchange the market trades on.
type:
- string
- 'null'
quoteAssetSymbol:
description: The ticker symbol of the market's quote asset.
type:
- string
- 'null'
type: object
key:
type: string
point_schema:
items:
properties:
description:
type: string
field:
type: string
name:
type: string
time:
type: boolean
type:
type: string
unit:
description: What the value is denominated in. Absent for a plain number.
enum:
- usd
- btc
- sats
- eth
- gwei
- native-token
- percent
- count
- ratio
type: string
type: object
type: array
points:
items:
description: A unix timestamp (seconds) followed by the metric values, in point_schema order.
items:
type:
- number
- 'null'
type: array
type: array
required:
- point_schema
- key
- points
type: object
BqenData:
properties:
point_schema:
items:
properties:
description:
type: string
field:
type: string
name:
type: string
time:
type: boolean
type:
type: string
unit:
description: What the value is denominated in. Absent for a plain number.
enum:
- usd
- btc
- sats
- eth
- gwei
- native-token
- percent
- count
- ratio
type: string
type: object
type: array
series:
items:
properties:
entity:
description: Information about what the series key identifies, from the "core-metrics-markets" model.
properties:
baseAssetSymbol:
description: The ticker symbol of the market's base asset.
type:
- string
- 'null'
exchangeName:
description: The name of the exchange the market trades on.
type:
- string
- 'null'
quoteAssetSymbol:
description: The ticker symbol of the market's quote asset.
type:
- string
- 'null'
type: object
key:
type: string
points:
items:
description: A unix timestamp (seconds) followed by the metric values, in point_schema order.
items:
type:
- number
- 'null'
type: array
type: array
type: object
type: array
required:
- point_schema
- series
type: object
securitySchemes:
apiKey:
description: API key sent in the `X-Blockworks-API-Key` header; `x-messari-api-key` is accepted for existing integrations. The catalog endpoints and models on the public access tier need no key.
in: header
name: X-Blockworks-API-Key
type: apiKey
x-tagGroups:
- name: Meta
tags:
- Tabular
- Timeseries
- name: Market Data
tags:
- Assets
- Markets
- Exchanges
- Derivatives
- Market Overview
- name: Blockchains
tags:
- Blockchains
- name: Projects & Protocols
tags:
- Projects & Entities
- Protocol Revenue
- Lending Protocols
- Spot DEXes
- Perp DEXes
- Vaults
- Launchpads
- TCG Platforms
- name: Real World Assets
tags:
- Stablecoins
- Tokenized Equities
- Tokenized Commodities
- name: Institutional
tags:
- ETFs
- Digital Asset Treasuries
- name: Fundraising
tags:
- Funding Rounds
- Funds & Investors
- Acquisitions
- name: Social & Mindshare
tags:
- Social & Mindshare
- name: News & Research
tags:
- News & Research
- name: Token Transparency Framework
tags:
- Token Transparency Framework